J'ai créé un script en Python qui utilise un sous-processus pour exécuter un outil externe, et j'ai créé quelque chose qui peut être exécuté en appuyant sur une commande Python. (En bref, un wrapper pour les outils externes)
Cependant, l'utilisateur n'est pas la personne qui ouvre le terminal et l'utilise, je suis donc heureux de pouvoir cliquer dessus avec l'interface graphique.
Et, comme toujours, beaucoup de jours addictifs.
tkinter (PySimpleGUI)
Il semble que Python soit livré en standard avec une boîte à outils GUI appelée ** tkinter [^ 1] **. Si vous l'utilisez, il semble que vous puissiez créer une interface graphique même si elle est temporaire.
Quand j'ai demandé à Google Sensei, je suis arrivé à l'article Si vous utilisez Tkinter, essayez d'utiliser PySimpleGUI ** PySimpleGUI [^ 2] ] ** Je suis tombé sur une bibliothèque de wrapper pour tkinter (et Qt, WxPython, Remi).
Ici, en plus de tkinter, si vous utilisez Qt, WxPython, Remi, vous saurez que vous pouvez créer une interface graphique avec Python. (Je ne veux pas créer une interface graphique en Python séparément, je veux juste une interface graphique qui peut facilement exécuter du code Python, donc en réalité tout va bien)
J'ai immédiatement essayé Hello World en me référant à PySimpleGUI --Jump Start, mais je souffre toujours de l'erreur suivante.
Terminal
$ python hello.py
Traceback (most recent call last):
File "hello.py", line 1, in <module>
import PySimpleGUI as sg
File "/Users/chibi/.pyenv/versions/3.8.2/lib/python3.8/site-packages/PySimpleGUI/__init__.py", line 2, in <module>
from .PySimpleGUI import *
File "/Users/chibi/.pyenv/versions/3.8.2/lib/python3.8/site-packages/PySimpleGUI/PySimpleGUI.py", line 103, in <module>
import tkinter as tk
File "/Users/chibi/.pyenv/versions/3.8.2/lib/python3.8/tkinter/__init__.py", line 36, in <module>
import _tkinter # If this fails your Python may not be configured for Tk
ModuleNotFoundError: No module named '_tkinter'
PySimpleGUI ne devrait pas être mauvais, il sera donc installé correctement à partir de la commande suivante décrite dans Tcl / Tk Python Interface. Vérifiez si c'est le cas.
Terminal
$ python -m tkinter
Bien sûr, la même erreur s'affiche car il semble qu'elle n'a pas été installée correctement.
Bien qu'il ait été retardé à décrire, cet environnement est le suivant.
Et l'article auquel j'ai fait référence dans ce numéro est Comment utiliser tkinter avec python dans pyenv. Cet article était exactement la réponse car j'utilise pyenv.
Vous devriez installer quelque chose appelé tcl-tk
avec brew. De plus, il serait bien de réinstaller Python en ajoutant des options lors de la construction de Python. Vérifiez si l'installation a réussi avec la commande précédente.
Terminal
$ python -m tkinter
Aucun problème!
Ensuite, essayez d'exécuter Hello World of PySimpleGUI.
Aucun problème! !!
Pour le moment, Hello World est terminé, alors créons une interface graphique. Cela dit, il n'y a que deux fonctions: "** Boîte de dialogue de sélection de fichier ** vous permet de sélectionner un fichier" et "** Bouton Exécuter ** vous permet d'utiliser le chemin du fichier sélectionné."
Vous ne pouvez pas simplement double-cliquer sur un fichier Python implémenté à l'aide de PySimpleGUI pour lancer réellement l'interface graphique. Après tout, vous devez entrer une commande Python comme celle-ci:
#Gui qui implémente GUI.py(Temporaire)Éxécuter.
$ python gui.py
Avec cela, la cible d'exécution est passée d'un fichier Python ** qui utilise un sous-processus à un fichier Python ** qui utilise PySimpleGUI, et il n'a pas échappé à l'exécution du terminal. Ce que je veux faire ici, c'est le mettre dans le Dock comme une ** application ** normale et le démarrer en un clic. C'est.
py2app
Il est maintenant temps de compter à nouveau sur Google Teacher. Je suis resté coincé avec plusieurs types, mais j'ai décidé d'utiliser ** py2app [^ 3] **. Ici, je me suis référé à l'article suivant. Créer une application Mac native avec py2app
Le flux de travail est le suivant.
Terminal
$ python setup.py py2app
~ Abréviation ~
ValueError: '/Users/chibi/.pyenv/versions/3.8.2/lib/libpython3.8.dylib' does not exist
Il n'y a pas de «.dylib» ~.
Quand je vais le voir, j'ai libpython3.8.a
mais pas .dylib
.
[Faites-en une application autonome sur Mac python](https://medium.com/@Dorobune/python-mac%E3%81%A7%E3%82%B9%E3%82%BF%E3%83%B3%E3 % 83% 89% E3% 82% A2% E3% 83% AD% E3% 83% B3% E3% 82% A2% E3% 83% 97% E3% 83% AA% E3% 81% AB% E3% 81 % 99% E3% 82% 8B-py2app-9ef3057519c) Si vous vous y référez, vous pouvez jouer avec les paramètres de setup.py
. .. .. Puisqu'il s'agit de Python «3.8.2» dans mon environnement, je vais l'essayer avec quelques modifications.
setup.py
from setuptools import setup
APP = ['gui.py']
DATA_FILES = []
- OPTIONS = {}
+ OPTIONS = {
+ 'argv_emulation':True,
+ 'plist': {
+ 'PyRuntimeLocations': [
+ '@executable_path/../Frameworks/libpython3.8m.dylib',
+ '/Users/chibi/.pyenv/versions/3.8.2/lib/libpython3.8m.dylib'
+ ]
+ }
+ }
setup(
app=APP,
data_files=DATA_FILES,
options={'py2app': OPTIONS},
setup_requires=['py2app'],
)
Non, quand j'ai essayé cela, il n'y a pas de .dylib
dans / Users / chibi / .pyenv / versions / 3.8.2 / lib /
, donc je ne peux pas le faire. Je vois des gens dans l'environnement Anaconda, comme des versions plus anciennes, mais je me demande s'il y a un .dylib
dans un autre environnement depuis le début.
J'ai décidé d'utiliser le «.a» existant comme un essai, mais mes attentes étaient vides et c'était inutile.
setup.py
from setuptools import setup
APP = ['gui.py']
DATA_FILES = []
OPTIONS = {
'argv_emulation':True,
'plist': {
'PyRuntimeLocations': [
'@executable_path/../Frameworks/libpython3.8m.dylib',
- '/Users/chibi/.pyenv/versions/3.8.2/lib/libpython3.8m.dylib'
+ '/Users/chibi/.pyenv/versions/3.8.2/lib/libpython3.8.a'
]
}
}
setup(
app=APP,
data_files=DATA_FILES,
options={'py2app': OPTIONS},
setup_requires=['py2app'],
)
Apparemment, la bibliothèque statique ne fonctionne pas et je dois préparer une bibliothèque partagée.
Dans pyenv, il semble qu'il ne soit nécessaire d'avoir PYTHON_CONFIGURE_OPTS =" --enable-framework "
qu'au moment de l'installation. Ensuite, il semble que libpython
soit placé en tant que bibliothèque partagée. Semblable à tkinter, il semble qu'il n'y ait pas assez d'options lorsque vous passez par pyenv. Puisque PYTHON_CONFIGURE_OPTS
est une variable d'environnement qui était également nécessaire pour tkinter, je vais ajouter --enable-framework
et essayer d'installer à nouveau Python.
Si tout se passe bien, vous aurez dist / xxx.app
.
Au fait, pour le moment, le setup.py
mentionné ci-dessus devrait être laissé par défaut. En d'autres termes, «OPTIONS» peut être laissé sous forme de tableau vide.
Double-cliquez sur «xxx.app» pour l'ouvrir. .. ..
Comme ça. Vous pouvez sélectionner un fichier et il y a un bouton d'exécution.
Lorsque j'ai essayé de vérifier l'opération, on m'a dit qu'il n'y avait pas d'outil externe spécifique dans la commande which
qui était exécuté en interne. Puisque le PATH lui-même est écrit en .bashrc
et .bash_profile
, il semble que le chemin soit dans l'état du terminal, mais le chemin n'est pas dans l'état de l'interface graphique. Comment enregistrez-vous des variables d'environnement comme Windows?
Voir Explorer comment définir des variables d'environnement pour les applications GUI sur macOS.
Terminal
$ sudo launchctl config user path <Informations PATH que vous souhaitez définir>
Vous pouvez le définir comme ceci. Il doit également être redémarré.
En passant, comme il a été écrit dans l'article ci-dessus, le chemin défini par launchctl
est enregistré dans ce qui suit.
/var/db/com.apple.xpc.launchd/config/user.plist
Après le redémarrage, lorsque j'ai exécuté à nouveau l'outil que j'ai créé, le sous-processus a fonctionné comme prévu et le résultat de l'exécution était comme prévu.
J'étais accro à diverses choses, mais un petit outil qui fonctionne comme prévu a été terminé.
tcl, tk related
)
--Fichier exécutable--enable-framework
)[^ 1]: Interface Tcl / Tk Python
Recommended Posts