Dieses Mal habe ich versucht, eine Anwendung zu verteilen, die die Funktion zum Anzeigen von Diagrammen mit GUI von Kivy implementiert. Ich wurde ein wenig erwischt, also als Memorandum. Umgebung ist Windows 10
Importieren Sie Kivy-Garden, um matplotlib in Kivy zu aktivieren. Später wird es mit pyinstaller in exe konvertiert, aber zu diesem Zeitpunkt scheint das Gartenverzeichnis verloren zu gehen Installieren Sie matplotlib mit --kivy.
$ pip install kivy-garden
$ garden install matplotlib --kivy
Installieren Sie nur die minimal erforderlichen Bibliotheken mit pip in einer virtuellen Umgebung. (Anaconda, Pyenv, Konstruktion der virtuellen Umgebung entfällt) Wenn es viele unnötige Dinge gibt, wird eine riesige Exe-Datei von 200 bis 300 MB geboren ...
$ pip install pyinstaller pypiwin32 #Diese beiden sind wesentlich
#Diese Jungs kommen nicht mit Kivy-Installation, also vergiss nicht, wenn du es nicht getan hast.
$ pip install kivy_deps.sdl2 kivy_deps.glew
$pip install Erforderliche Bibliotheken#Alle erforderlichen Bibliotheken für py-Dateien
Ich bin bereit. Verschieben Sie Ihr Arbeitsverzeichnis in eine Python-Datei und gehen Sie wie folgt vor: pyinstaller hat verschiedene nützliche Verpackungsfunktionen, aber hier Verwenden Sie --onefile, um die Dateien zusammenzuführen.
$ pyinstaller ***.py --onefile
Im Arbeitsverzeichnis werden verschiedene Dinge generiert, aber vorerst wird eine exe-Datei ohne dist generiert. In diesem Zustand startet die GUI noch nicht.
#Im Arbeitsverzeichnis
***.py
***.kv
***.spec
dist
pycache
build
Um die GUI zu aktivieren, beschreiben Sie als Nächstes die Abhängigkeiten in der SPEC-Datei.
#Unterhalb der Spezifikationsdatei
> ***.spec
from kivy_deps import sdl2, glew #Zusätzlicher Teil ①
block_cipher = None
a = Analysis(['***.py'],
pathex=['c:\\Gepacktes Verzeichnis'],
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)], #Zusätzlicher Teil ②
name='main',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=True )
#Zusätzlicher Teil ③
coll = COLLECT(exe, Tree('c:\\Kivy-Dateiverzeichnis'),
a.binaries,
a.zipfiles,
a.datas,
*[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)],
strip=False,
upx=True,
name='main')
In meinem Fall habe ich einen Ordner (Ordner wie Layout) für ***. Kv im selben Verzeichnis wie die Python-Datei erstellt und dort abgelegt. (Es mag nicht viel Sinn machen, aber nehmen Sie beim Sammeln keine unnötigen Dinge auf)
Im folgenden Verzeichnis wird ein Hauptordner erstellt und darin eine neue exe-Datei erstellt. Alle abhängigen Dateien sind in diesem und beim Verteilen der Anwendung in jedem Hauptordner vorhanden Du wirst es brauchen. (Ich denke, es kann einheitlicher sein. Dies ist jetzt die Grenze für mich.) Wenn Sie es in einem Verzeichnis ausblenden und nur die Verknüpfung der exe-Datei gut verwenden können Ich dachte, es wäre so und kompromittiert.
dist
|_main #← Neue exe-Datei in dieser
|_***.exe
Insbesondere habe ich matplotlib == 3.1.1 verwendet, aber ich habe einige Informationen gefunden, die mit der neuesten Version nicht möglich waren.
Derzeit können GUI-Anwendungen verteilt werden.
Recommended Posts