PyInstaller-Tutorial für Windows

Der PyInstaller kann Python-Programme in Stand-alone- bzw. Single-file-Executables konvertieren. Das Programm kann dann also ohne den Python-Interpreter auf anderen Systemen ausgeführt werden. Es kann nicht nur ein ausführbares Archiv, sondern auch wirklich eine eigenständige EXE-Datei erstellt werden.

Woher man PyInstaller bekommt

Auf der PyInstaller-Homepage kann man die pyinstaller_1.3.zip runterladen. Man kann dieses Archiv in einem beliebigen Verzeichnis speichern. Ich beziehe mich auf Windows XP; C:\Python24\PyInstaller_1.3\.

Wie man PyInstaller konfiguriert

Vor der ersten Verwendung muss PyInstaller für das uns vorliegende System /der Python-Version /etwaigen vorhandenen Archiv-Programmen konfiguriert werden.

Wir öffnen den Eingabe-Interpreter (Konsole) unseres Betriebssystems (hier Win XP) und übergeben folgende Anweisung:

Konsole1.jpg

Damit haben wir den PyInstaller auf dem System konfiguriert.

Eine SPEC-Datei erstellen

Nun können wir für unser Test-Programm (myscript.py) eine SPEC-Datei erstellen:

Im PyInstaller-Verzeichnis liegt die Makespec.py. Diese sprechen wir über die Konsole an:

Konsole2.jpg

Optionen setzt man mit --, doppelten Bindestrichen, wie es hier zu sehen ist. --onefile bedeutet nichts anderes als dass wir eine Single-file-Executable erstellen wollen. Wäre dies eine Windows-Anwendung, so hätten wir beispeilsweise --onefile --windowed eingefügt. Für ein Icon zusätzlich --icon=myicon.ico. Die verschiedenen Optionen kann man auf der Seite Create a spec-file einsehen.

Erstellt wurde nun in C:\Python24\pyinstaller_1.3 ein Ordner myscript. Hier drin befindet sich nun unsere myscript.spec. Und so sieht sie in unseren Beispiel aus:

   1 a = Analysis([os.path.join(HOMEPATH,'support\\_mountzlib.py'), os.path.join(HOMEPATH,'support\\useUnicode.py'), 'C:\\path\\to\\myscript.py'],
   2              pathex=['C:\\Python24\\pyinstaller_1.3'])
   3 pyz = PYZ(a.pure)
   4 exe = EXE( pyz,
   5           a.scripts,
   6           a.binaries,
   7           name='myscript.exe',
   8           debug=False,
   9           strip=False,
  10           upx=False,
  11           console=True )

Wie man eine einzelne EXE-Datei erstellt

Im PyInstaller-Verzeichnis liegt die Build.py. Diese sprechen wir wieder über die Konsole an:

Konsole3.jpg

In C:\Python24\pyinstaller_1.3\myscript ist nun auch eine myscript.exe, die wir weitergeben können. Außerdem befindet sich hier der Ordner buildmyscript, den wir gefahrlos löschen können. Dann kann es hier durchaus noch eine warnmyscript.txt geben. Die lediglich während des Build-Vorgangs zustande gekommen ist und eigentlich auch gelöscht werden kann, sofern die EXE-Datei funktioniert (kann ja auch mal an Euren Systemeigenschaften liegen.)

Batchdatei

Ich hab mir kleine Batch Dateien erstellt, weil meine Pfade nicht immer günstig liegen. z.B. liegt upx nicht im Pfad, wird in der Batchdatei aber "temporär" eingetragen. Somit kann man mit einem klick eine neue EXE erzeugen, wenn man z.B. im Sourcescript Änderungen vorgenommen hat.

Damit das ganze funktioniert, muß man die Pfade anpassen und den Scriptnamen ändern. Die Batchdatei muß dann im selben Verzeichnis rein, indem das Sourcescript liegt.

@prompt -$G

:: Bitte Pfade anpassen:
set scriptname=myscript
set pyinstaller=D:\Python\pyinstaller-1.3
set path=%path%;D:\tools\upx203w\


:: spec Datei erzeugen
python %pyinstaller%\Makespec.py --onefile --upx %~dp0%scriptname%.py
:: EXE Datei erzeugen:
python %pyinstaller%\Build.py %~dp0%scriptname%.spec


:: Aufräumen
rd buildtest /s /q
del %~dp0%scriptname%.spec
del warntest.txt

@pause

Single-file-Executables

Eine Single-file-Executable ist in Wirklichkeit nur ein zusammengefasstes Archiv. Beim Starten werden automatisch die Dateien in das System-Temp-Verzeichnis entpackt und das Programm gestartet. Nach dem Beenden werden die temporären Dateien automatisch gelöscht.

Es kann jedoch Situationen geben, in dem die Temp-Dateien nicht gelöscht werden. z.B. wenn das Programm durch den TaskManager abgebrochen wurde. Dabei hat das Programm keine Change mehr die Temp-Dateien zu löschen.

Ein Single-file-Executable hat Vorteile: Die Variante ist ein wenig kleiner, als die Einzeldateien. Außerdem merkt der Normal-User von dem Entpacken nichts. Für ihn sieht es wie jede andere EXE-Datei aus.

Tags: Tipps

PyInstaller-Tutorial für Windows (last edited 2009-06-17 16:14:20 by localhost)