Ich möchte ein Business-Effizienz-Tool vertreiben, das mit Python intern erstellt wurde. Viele Mitglieder sind mit PCs nicht vertraut. Verteilen Sie sie daher als exe-Dateien. Es gibt verschiedene Möglichkeiten, um es exe zu machen. Überlegen Sie selbst, welche Methode unter den Gesichtspunkten "Startzeit", "Dateigröße", "einfache Verteilung / Einführung" usw. verwendet werden sollte.
Ich dachte, es wäre sicher, ** onefile mit ** pyinstall ** ** + ** zu einer Exe mit den minimal erforderlichen Bibliotheken zu machen, die in der virtuellen Umgebung installiert sind **. In Situationen, in denen eine Startzeit erforderlich ist, kann es erforderlich sein, die Konvertierung einer Datei aufzugeben.
Windows10 Home Python3.8.2(32bit) Visual Studio Code 1.45.1 PyInstaller3.6
Ich habe eine supereinfache test.py erstellt und diese Datei mit jeder Methode in eine exe konvertiert. Das importierte Pyautogui hat keine besondere Bedeutung (weil ich mich einsam fühlte, dass es keine externe Bibliothek gab)
test.py
import pyautogui
print("Hello,World!")
Die Startzeit wurde mit dem am Ende dieses Dokuments beschriebenen Werkzeug gemessen.
Das Mittel der Exe-Konvertierung, das derzeit am wichtigsten zu sein scheint. Da es sich nicht um eine Standardbibliothek handelt, installieren Sie sie mit pip.
Installieren Sie mit > pip install py installer
vom Terminal.
Führen Sie danach > pyinstaller <konvertierte Datei.py> <-Option>
vom Terminal aus aus, und die exe-Konvertierung wird gestartet.
Sie können es optional auf eine Datei festlegen, die später beschrieben wird, die exe-Datei umbenennen und die Konsole (schwarzer Bildschirm) beim Start ausblenden. Beachten Sie, dass das optionale "-" (Bindestrich) eins oder zwei sein kann.
python
> pyinstaller test.py --name test2 --noconsole --onefile
Wenn die Meldung "INFO: Erstellen von EXE aus EXE-00.toc erfolgreich abgeschlossen" angezeigt wird, ist der Vorgang abgeschlossen. Die exeized-Datei wird in einem Ordner namens "dist" im aktuellen Verzeichnis erstellt. Wenn Sie in den Optionen keinen Namen angeben, wird eine Datei mit dem zu konvertierenden Dateinamen .exe generiert.
Wenn in der Option --onefile nicht angegeben ist (= Standard), wird im Ordner dist ein Ordner mit dem Dateinamen erstellt und die exe-Datei darin gespeichert. Der Vorteil ist die schnelle Startzeit. Der Start der später beschriebenen Ein-Datei-Methode dauert mehr als 5 Sekunden. Sie kann jedoch in weniger als einer Sekunde gestartet werden, ohne dass eine Datei erstellt wird. Das Innere des Verzeichnisses sieht jedoch so aus. Bei meinem Arbeitsplatz ist es leicht vorstellbar, dass dieser Ordner nach einer Weile nicht mehr verwendet wird, selbst wenn Sie ihn mit "Bitte klicken Sie auf XXX.exe, um ihn zu starten" verteilen. (Wenn Sie eine Verknüpfung erstellen können, gibt es möglicherweise einen Chan.)
Schließlich möchte ich die Tools in einer Datei zusammenfassen, damit sie einfach nach der Verteilung verwendet werden können. Es ist einfach zu machen. Fügen Sie einfach die Option "--onefile (oder -F)" hinzu, wenn Sie pyinstaller ausführen. Dadurch wird dem dist-Ordner eine einzelne Nur-Exe-Datei hinzugefügt. Der Nachteil ist die Startzeit. Wenn keine Maßnahmen ergriffen werden, dauert der Start eines supereinfachen Codes wie test.py länger als 5 Sekunden.
"Cx-Freeze" und "py2ex" scheinen für Windows berühmt zu sein. Es wird gesagt, dass py2ex nur bis zu Python 3.4 unterstützt. (Es scheint, dass wenn Sie es direkt von Github herunterladen, es bis zu Python 3.7 unterstützen kann. Ich habe es versucht, aber ich habe nicht verstanden, wie man Python-Versionen wechselt, also habe ich aufgegeben.) Also habe ich cx-Freeze ausprobiert. Die folgende Seite war hilfreich für die Installation und Exe, daher werde ich sie weglassen. Ich habe versucht, Python mit cx_Freeze zu beenden Da es notwendig ist, eine Einstellungsdatei mit dem Namen setup.py getrennt von dem zu konvertierenden Skript zu erstellen, mache ich mir Sorgen, dass dies einige Zeit dauern wird. (Es scheint, dass py2ex das gleiche ist) Die Startzeit ist ziemlich schnell (ca. 0,6 Sekunden), aber es scheint, dass sie nicht in eine Datei konvertiert werden kann und sich die Dateigröße nicht wesentlich ändert. Daher hatte ich das Gefühl, dass es im Vergleich zu PyInstaller wenig Verdienst gibt.
Als test.py mit PyInstaller + onefile konvertiert wurde, wurde die Datei, in der gerade "Hello, World!" Angezeigt wurde, ungefähr 36 Millionen groß. Dies ist immer noch ein guter Mensch, und es scheint, dass es je nach Umgebung oft mehr als 100 MB gibt. Anscheinend neigt PyInstaller dazu, Dateien aufzublähen, und die Ursache scheint zu sein, dass alle in dem von Ihnen verwendeten Python installierten Bibliotheken gepackt werden. Als Gegenmaßnahme habe ich daher im folgenden Artikel gelernt, dass ich eine leere virtuelle Umgebung erstellen sollte, in der nichts installiert ist, die minimal erforderlichen Bibliotheken darin ablegen und sie mit pyinstaller exe machen sollte. [Traurige Neuigkeiten] PyInstaller wird eine 300-MB-Exe-Datei ausspucken
Ich habe meine eigene Art des Aufbaus einer virtuellen Umgebung organisiert und werde sie daher als Memorandum aufschreiben.
Führen Sie den Befehl "venv" vom allgemeinen Terminal aus, um eine virtuelle Umgebung zu erstellen (Abkürzung für Vertial ENVironment?).
python
> py -m venv <Beliebiger Name der virtuellen Umgebung (hier pyautogui_only)>
⇒ Im aktuellen Verzeichnis wird ein Ordner mit einem beliebigen Namen für die virtuelle Umgebung erstellt
Klicken Sie mit der rechten Maustaste auf "Activate.ps1" aus dem Ordner "Scripts" des zuvor erstellten Ordners. ⇒ Als Pfad kopieren. ⇒ In das allgemeine Terminal einfügen. ⇒ Löschen "(doppeltes Anführungszeichen) vor und nach" ⇒ Mit ENTER ausführen (mit CD verschieben). Kann ausgeführt werden
python
> C:\Users\aaa\Desktop\python\pyautogui_only\Scripts\Activate.ps1
Wenn die Fehlermeldung "Da die Skriptausführung auf diesem System deaktiviert ist" angezeigt wird, befindet sich das Skript wahrscheinlich in einem Zustand, in dem es aufgrund von Sicherheitseinstellungen nicht ausgeführt werden kann. Führen Sie also zuerst den folgenden Befehl auf dem allgemeinen Terminal aus.
python
> Set-ExecutionPolicy RemoteSigned -Scope Process
Führen Sie dann Activate.ps1 erneut aus und Sie sollten es wahrscheinlich aktivieren können. Diese Einstellung muss jedes Mal neu eingestellt werden, wenn das Terminal heruntergefahren wird. Auf der Referenzseite ↓ wird auch beschrieben, wie Sie die VS-Code-Einstellungen dauerhaft ändern. Zusammenfassung der Einstellungen für die Verwendung von Smooth Venv mit Visual Studio Code für Windows Wenn die Aktivierung erfolgreich ist, wird der Name der virtuellen Umgebung auf der linken Seite des aktuellen Verzeichnisses des Hyperterminals angezeigt.
python
(pyautogui_only) PS C:Users\~\ > _
Bei test.py ist diesmal nur pyautogui installiert. Vergessen Sie nicht, auch PyInstaller zu installieren. (Wenn Sie bei der Installation des neuesten Pyautogui eine Fehlermeldung erhalten, lesen Sie bitte auch hier)
Es ist in Ordnung, als wäre es keine virtuelle Umgebung.
python
(pyautogui_only) PS C:Users\~\ > pyinstaller test.py --onefile
⇒ Die exe-Datei wird im dist-Ordner ausgegeben. (Um aus der virtuellen Umgebung herauszukommen, führen Sie übrigens den Befehl disable im allgemeinen Terminal aus.)
Infolgedessen konnte in meinem Fall die Dateigröße, die ungefähr 36 MB betrug, auf ungefähr 10 MB unterdrückt werden. Die Startzeit wurde von ca. 6 Sekunden auf ca. 2,3 Sekunden reduziert.
Die diesmal verifizierten Zahlenwerte sind wie folgt. Wie oben erwähnt, halte ich PyInstaller + onefile + minimale Bibliotheksinstallation in einer virtuellen Umgebung für die Verteilung von Tools zur Geschäftsverbesserung für ausreichend. (Wenn es einige Sekunden lang beginnt, sollte es nicht jedes Mal so schmerzhaft sein) Das Erstellen einer virtuellen Umgebung nach der anderen ist etwas mühsam, aber es scheint, dass die Exe-Konvertierung keine so häufige Aufgabe ist. Dieses Ergebnis ist natürlich bei einem supereinfachen Programm wie test.py der Fall. Die Situation kann sich ändern, wenn die Anzahl der verwendeten externen Bibliotheken zunimmt. Daher muss jedes Mal eine Beurteilung vorgenommen werden.
python
import time
import subprocess
import sys
import csv
import pyautogui
import os
if len(sys.argv) >= 2:
start_time = time.time()
subprocess.run(sys.argv[1]) #← Ziehen&Empfangen Sie den Pfad der abgelegten Datei und führen Sie ihn aus
end_time = time.time()
process_time = end_time - start_time
pyautogui.alert(str(sys.argv[1]) + " " + str(process_time)) #Nur Ergebnisanzeige
#Geben Sie das Ergebnis als CSV im selben Verzeichnis wie diese Datei aus
file_name = os.path.join(os.path.dirname(sys.argv[0]), "check_time.csv")
with open(file_name, "a", newline="") as fo:
csv_file = csv.writer(fo)
csv_file.writerow([sys.argv[1], process_time])
↑ Machen Sie dies zu einer Exe-Datei, starten Sie das Programm durch Ziehen und Ablegen und messen Sie die Zeit, die zum Beenden benötigt wurde. ⇒ Ausgabe.
Recommended Posts