Créer une application graphique par Kivy (y compris matplotlib)

Cette fois, j'ai essayé de distribuer une application qui implémente la fonction d'affichage des graphiques avec l'interface graphique de Kivy. Je me suis fait prendre un peu, donc comme mémorandum. L'environnement est Windows 10

1. Importez les bibliothèques requises

Importez Kivy-Garden pour activer matplotlib dans Kivy. Plus tard, il sera converti en exe avec pyinstaller, mais à ce moment-là, il semble que le répertoire de jardin sera perdu, donc Installez matplotlib en utilisant --kivy.

$ pip install kivy-garden
$ garden install matplotlib --kivy

2.Faites exe avec pyinstaller

Installez uniquement les bibliothèques minimales requises avec pip dans un environnement virtuel. (Anaconda, pyenv, la construction d'environnement virtuel est omise) S'il y a beaucoup de choses inutiles, un énorme fichier exe de 200 à 300 Mo verra le jour ...

$ pip install pyinstaller pypiwin32 #Ces deux sont essentiels

#Ces types ne viennent pas avec l'installation de kivy, alors n'oubliez pas si vous ne l'avez pas fait.
$ pip install kivy_deps.sdl2 kivy_deps.glew 
$pip install Bibliothèques requises#Toutes les bibliothèques requises pour les fichiers py

3. Emballage

Je suis prêt. Déplacez votre répertoire de travail vers un fichier python et procédez comme suit: pyinstaller a diverses fonctions d'emballage utiles, mais ici Utilisez --onefile pour rassembler les fichiers.

$ pyinstaller ***.py --onefile

Différentes choses sont générées dans le répertoire de travail, mais pour le moment, un fichier exe est généré sans dist. Dans cet état, l'interface graphique ne démarre pas encore.

#Dans le répertoire de travail
***.py
***.kv
***.spec
dist
pycache
build

4. Modifier le fichier de spécifications

Ensuite, afin d'activer l'interface graphique, décrivez les dépendances dans le fichier SPEC.

#Sous le fichier de spécifications
> ***.spec

from kivy_deps import sdl2, glew  #Partie supplémentaire ①
block_cipher = None
a = Analysis(['***.py'],
             pathex=['c:\\Annuaire packagé'],
             binaries=[],
             datas=[],
             hiddenimports=[]
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          *[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)],  #Partie supplémentaire ②
          name='main',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          upx_exclude=[],
          runtime_tmpdir=None,
          console=True )

#Partie supplémentaire ③
coll = COLLECT(exe, Tree('c:\\répertoire de fichiers kivy'),
               a.binaries,
               a.zipfiles,
               a.datas,
               *[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)],
               strip=False,
               upx=True,
               name='main')

Dans mon cas, j'ai créé un dossier (dossier tel que Layout) pour ***. Kv dans le même répertoire que le fichier python et je l'ai mis dedans. (Cela n'a peut-être pas beaucoup de sens, mais ne ramassez pas les choses inutiles dans le processus de collecte)

5. Achèvement

Un dossier principal est créé dans le répertoire suivant et un nouveau fichier exe y est créé. Tous les fichiers dépendants existent dans celui-ci, et lors de la distribution de l'application, chaque dossier principal Vous en aurez besoin. (Je pense que cela peut être plus unifié. C'est la limite pour moi maintenant.) Si vous pouvez le cacher dans un répertoire quelque part et utiliser uniquement le raccourci du fichier exe J'ai pensé que ce serait comme ça et compromis.

dist
|_main    #← Nouveau fichier exe dans ce
|_***.exe

En particulier, j'ai utilisé matplotlib == 3.1.1, mais j'ai trouvé des informations qui ne pouvaient pas être faites avec la dernière version.

Pour le moment, les applications GUI peuvent désormais être distribuées.

Recommended Posts

Créer une application graphique par Kivy (y compris matplotlib)
Traitement de fichiers multiples avec Kivy + Matplotlib + Draw Graph sur GUI
pandas Matplotlib Résumé par utilisation
Superposition transparente de l'histogramme par Matplotlib
Application Python: visualisation de données, partie 2: matplotlib
Affichage graphique en temps réel par matplotlib