[Python] Ich habe die exe-Konvertierungsmethode für die Verteilung von Business-Effizienz-Tools untersucht.

Was du machen willst

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.

Fazit zuerst

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.

Umgebung

Windows10 Home Python3.8.2(32bit) Visual Studio Code 1.45.1 PyInstaller3.6

Inhalt untersucht und verifiziert

  1. Code zur Überprüfung
    1. Ausführung durch PyInstaller 1-1. Nicht eine Datei (Standard) 1-2. Machen Sie eine Datei
  2. Andere Methoden als PyInstaller
    1. Machen Sie es in einer virtuellen Umgebung exe

0. Code zur Überprüfung

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.

1. 1. Ausführung durch PyInstaller

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.

1-1. Nicht eine Datei (Standard)

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. image.png 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.)

1-2. Machen Sie eine Datei

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.

2. Andere Methoden als PyInstaller

"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.

3. 3. Machen Sie es in einer virtuellen Umgebung exe

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.

3-1. Erstellen Sie eine virtuelle Umgebung

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

3-2. Aktivieren Sie die erstellte virtuelle Umgebung.

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\~\ > _
3-3. Installieren Sie nur die erforderlichen Bibliotheken mit dem Befehl pip.

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)

3-4. Führen Sie PyInstaller aus

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.

Zusammenfassung

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. image.png 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.

Bonus: Ein Programm zur Messung der Startzeit

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

[Python] Ich habe die exe-Konvertierungsmethode für die Verteilung von Business-Effizienz-Tools untersucht.
[Python] Ich habe versucht, den Funktionsnamen durch den Funktionsnamen zu ersetzen
vprof - Ich habe versucht, den Profiler für Python zu verwenden
Ich habe die Methode der kleinsten Quadrate in Python ausprobiert
Ich habe zum ersten Mal versucht, Python zu programmieren.
Was ich zum ersten Mal in Python bekommen habe
Ich habe Python zum ersten Mal auf dem Mac ausprobiert.
HoloViews werden möglicherweise zum Standard für Python-Visualisierungstools
Ich habe Python zum ersten Mal mit Heroku ausprobiert
Refactoring-Tools, die mit Python verwendet werden können
Ich war 2 Minuten lang süchtig nach Python-Debugger-PDF
Ich wusste nicht, wie ich die [Python] für die Anweisung verwenden sollte
Verschiedene Hinweise zur Verwendung von Python für Projekte
Ich habe den Gerätebaum untersucht
Ich habe die Python-Quelle heruntergeladen
Ich habe versucht, Kwant zu verwenden, ein Python-Modul für die Quantentransportberechnung
Ich habe einen AttributeError erhalten, als ich die offene Methode in Python verspottet habe
Ich habe die Zertifizierungsprüfung für Python-Ingenieure bestanden und die Lernmethode freigegeben
Ich habe versucht, ein Gerüstwerkzeug für Python Web Framework Bottle zu erstellen
Ich habe versucht, die Effizienz der täglichen Arbeit mit Python zu verbessern