Hallo @ all,
Jens und ich haben uns hier http://www.python-forum.de/post-64297.html#64297 gefragt, ob der http://pyinstaller.python-hosting.com/c ... i/report/1 kleine Dateien erzeugen kann? Wie klein diese sind, und ob der pyinstaller ausgereift ist. Daher habe ich einfach mal einen Vergleich gemacht
Vorweg für alle die es nicht wissen:
Pyinstaller kann single-file executables durch setzen der Option onefile erzeugen.
py2exe kann unter Umständen durch compression http://www.py2exe.org/index.cgi/BetterCompression eine relativ klein gehaltene Installationsexecutable, wofür unter anderem das Inno Setup (ein Windows Installer) sorgt, erzeugen.
Auch py2exe kann selbstständig single-file executables erzeugen. Jedoch habe ich bei Verwendung von Tkinter und folgender setup.py (ist die die py2exe beilegt) zwar den dist und build Ordner sowie einer standalone-EXE erhalten, leider brach diese jedoch beim Starten m. einer f. XP typischen Fehlermldg. "es wurde ein Prob. festgestellt" ab. Mit dem wx.window-Beispiel was ebenfalls py2exe beiliegt, hat´s dagegen funktioniert.
EDIT: http://paste.pocoo.org/show/1379/ Script ausgelagert
Nun der Vergleich mit meinem Test-Script:
***********************************************************************
Das Sript selbst ist 8,03 KB groß.
***********************************************************************
pyinstaller normal mit dist-Ordner: 4,80 MB
pyinstaller (Build-Ordner kann gelöscht werden) es bleibt also nur die Exe: 2,40 MB
Py2exe normal compiliert (Single-File ging ja nicht in meinem Bsp.) also dist-Ordner: 7,75 MB
***********************************************************************
pyinstaller hat mir vom Ablauf her sehr gut gefallen. Die Optionen werden direkt in der Konsole statt in einer setup.py eingegeben. Zugegeben, das kann am Anfang verwirrend sein, ist finde ich jedoch praktischer als eine setup.py
Das erwähnte wx.python-Beispiel von py2exe ist in seiner Ur-Form 1,42 KB groß. Mit py2exe als single file executable bin ich auf stolze 4,80 MB gekommen.
Getestet habe ich mit Python 2.4; pyinstaller 1.3; py2exe 0.6.5.; Win XP
@Jens: Du fragtest: ob wir den Wiki-Eintrag editieren sollten. Ja ich wäre dafür weil ja eigentlich fehlt, dass man eine single-file executable erstellen kann. Zum anderen wäre auch geklärt, dass man hiermit relativ kleine Exe-Dateien erzeugen kann. Ok 2,40 MB sind immerhin keine 8,03 KB, aber im Vergleich zu py2exe wo man ja mit der umständlichen Kompression kleinere Werte erreichen kann, kann ich mit 2,40 MB auch noch leben.
Ich würde wenn keiner negatives über den pyinstaller erfahren hat, dann auch eine Anleitung ins Wiki stellen. (Das im Wiki vorhandene Video zeigt leider nicht, wie man zu einer einzigen EXE kommt.)
Vergleich zwischen pyinstaller und py2exe
- Sr4l
- User
- Beiträge: 1091
- Registriert: Donnerstag 28. Dezember 2006, 20:02
- Wohnort: Kassel
- Kontaktdaten:
Eine Frage ich konnte es leider nicht selber testen bis jetzt.
Macht PyInstaller bei Singel Files echte singels oder ist das eine exe die ohne Dialog sich ins Tempverzeichnis legt, und dort dann die selben Dateien liegen wie in der nicht Singel File Version?
Macht PyInstaller bei Singel Files echte singels oder ist das eine exe die ohne Dialog sich ins Tempverzeichnis legt, und dort dann die selben Dateien liegen wie in der nicht Singel File Version?
-
- User
- Beiträge: 196
- Registriert: Sonntag 1. Januar 2006, 20:12
- Wohnort: aus dem hohen Norden....
Sr4l hat geschrieben:Eine Frage ich konnte es leider nicht selber testen bis jetzt.
Macht PyInstaller bei Singel Files echte singels oder ist das eine exe die ohne Dialog sich ins Tempverzeichnis legt, und dort dann die selben Dateien liegen wie in der nicht Singel File Version?
Scheint ein temporäres Verzeichnis zu brauchen. (das meinst Du glaube ich nicht) Pyinstaller macht eine einzige .exe-Datei. Das was natürlich dazu kommt, sind etwa Bilder, Icons etc.A --onefile works by packing all the shared libs / dlls into the archive attached to the bootloader executable (or next to the executable in a non-elf configuration). When first started, it finds that it needs to extract these files before it can run "for real". That's because locating and loading a shared lib or linked-in dll is a system level action, not user-level. With PyInstaller v1.0 it always uses a temporary directory (_MEIpid) in the user's temp directory. It then executes itself again, setting things up so the system will be able to load the shared libs / dlls. When executing is complete, it recursively removes the entire directory it created.
Man selbst startet den Build-Vorgang, so wie es bspw. bei py2exe im Hintergrund gemacht wird. Darauf schliesst sich, dass man also nur
eine exe + einen Build-Ordner erhält. Den Build-Ordner kann man löschen, (enthält eh nur eine Datei). Den dist-Ordner gibt es dann gar nicht mehr. (Aber ich glaube, den hattest Du doch gemeint, oder?)
Pyinstaller macht in der Tat kleine .exe-Dateien. Das ist f. mich persönlich die Hauptsache.
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Naja, klein ist Relativ.
Nach deinen obrigen Angaben hast du am Ende ein 2,40MB große EXE-Datei, oder?
Da ist py2exe besser, wenn man sich die zusätzliche Arbeit macht:
Naja, wie man es dreht und wendet. Es bleibt dabei, das man keine kleinen EXE Dateien mit Python erstellen kann.
Ich hab es mal unter [wiki]Python#AllgemeineVorUndNachteileVonPython[/wiki]unter "Contra" Aufgeschrieben.
Nach deinen obrigen Angaben hast du am Ende ein 2,40MB große EXE-Datei, oder?
Da ist py2exe besser, wenn man sich die zusätzliche Arbeit macht:
Das Auspacken in einem Temp-Verz. dürfte die Startzeit spürbar verlängern, oder? Wäre eigentlich nett, wenn das im Speicher passieren würde, was wohl aber nicht ganz so einfach sein dürfte...jens hat geschrieben:http://www.py2exe.org/index.cgi/BetterCompression (siehe Abschnitt "7ZIP and UPX") In dem genannten Beispiel bleiben ca 800KB...
Naja, wie man es dreht und wendet. Es bleibt dabei, das man keine kleinen EXE Dateien mit Python erstellen kann.
Ich hab es mal unter [wiki]Python#AllgemeineVorUndNachteileVonPython[/wiki]unter "Contra" Aufgeschrieben.
-
- User
- Beiträge: 196
- Registriert: Sonntag 1. Januar 2006, 20:12
- Wohnort: aus dem hohen Norden....
Da möchte ich nur noch in den Raum werfen, das Pyinstaller solche Kompressionsvorgänge ebenfalls unterstützt. http://pyinstaller.python-hosting.com/f ... xecutables und http://pyinstaller.python-hosting.com/f ... troduction
Wobei ich dies nicht getestet habe, und auch nicht auf die 800 KB drauf aus bin.
Frage: Soll ich jetzt im Wiki noch auf die single-file Executable hinweisen, und eine Anleitung reinstellen?
Wobei ich dies nicht getestet habe, und auch nicht auf die 800 KB drauf aus bin.
Frage: Soll ich jetzt im Wiki noch auf die single-file Executable hinweisen, und eine Anleitung reinstellen?
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Auf jeden Fall. Und pack PyInstaller nach oben. Also zuerst darauf Hinweisen. Ist ja IMHO z.Z. die neuste Entwicklung und bietet die besten Features...Andy hat geschrieben:Frage: Soll ich jetzt im Wiki noch auf die single-file Executable hinweisen, und eine Anleitung reinstellen?
btw.: http://pyinstaller.python-hosting.com/ticket/10
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Das Auspacken von UPX-komprimierten Programmen verlängert die Startzeit ja auch. Und es verbraucht Speicher, weil die Programme in den Speicher entpackt werden.jens hat geschrieben:Das Auspacken in einem Temp-Verz. dürfte die Startzeit spürbar verlängern, oder?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Ich hab wenn ich mit py2exe Apps verteilt hab, meistens dann das Ergebniss in eine .rar oder .tar.gz gesteckt, und bin immer recht gut damit gefahren. Programme die wx verwenden werden normal so ca. 12mb (wenn ich mich recht erinner) und dann nach dem Komprimieren meistens so ca. 2-3mb. Der Ansatz kostet nur einmal Zeit zum entpacken und in Zeiten von DSL sind 3mb hoch oder runterladen auch kein Beinbruch mehr (waren es selbst zu 56k Zeiten für mich nicht ).
greets meph
greets meph
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
So, ich hab auch mal tests gemacht. (Alles unter Windows mit Python 2.4)
Das Mini-Skript ist nur eine print Ausgabe. Das TK-Skript öffnet nur eine GUI mit ein paar Elementen, ist aber ohne Logik.
PyInstaller v1.3
py2exe v0.6.6
Mini-Skript (8 Dateien + 7-Zip + UPX): 1,41MB
TK-Test (11 Dateien + 7-Zip + UPX): 2,09MB
Mit py2exe gibt es allerdings einen Fehler, beim starten der EXE:
zipimport.ZipImportError: can't decompress data; zlib not available
Die PyInstaller EXE klappen ohne Probleme.
Das hätte ich jetzt aber nicht gedacht. Hätte gedacht, das 7-ZIP noch etwas rausholen kann, tuts aber nicht wirklich. Dann lohnt sich der ganze Aufwand nicht wirklich.
Fazit: PyInstaller ist auf jeden Fall zu bevorzugen. Dennoch ist eine kleine commandline App mit 1,43MB nicht gerade klein
EDIT: Ach, nochwas... Um die Ergebnisse nicht zu verfälschen, sollte man immer im PyInstaller-Verzeichnis das cache Verzeichnis löschen
Das Mini-Skript ist nur eine print Ausgabe. Das TK-Skript öffnet nur eine GUI mit ein paar Elementen, ist aber ohne Logik.
PyInstaller v1.3
- Mini-Skript
- single file
mit UPX: 1,43MB
ohne UPX: 1,64MB
- Ordner (8 Dateien)
mit UPX: 1,51MB
ohne UPX: 3,17MB
- single file
- TK-Test
- single file:
mit UPX: 2,08MB
ohne UPX: 2,40MB
- Ordner (11 Dateien)
mit UPX: 2,20MB
ohne UPX: 4,79MB
- single file:
py2exe v0.6.6
Mini-Skript (8 Dateien + 7-Zip + UPX): 1,41MB
TK-Test (11 Dateien + 7-Zip + UPX): 2,09MB
Mit py2exe gibt es allerdings einen Fehler, beim starten der EXE:
zipimport.ZipImportError: can't decompress data; zlib not available
Die PyInstaller EXE klappen ohne Probleme.
Das hätte ich jetzt aber nicht gedacht. Hätte gedacht, das 7-ZIP noch etwas rausholen kann, tuts aber nicht wirklich. Dann lohnt sich der ganze Aufwand nicht wirklich.
Fazit: PyInstaller ist auf jeden Fall zu bevorzugen. Dennoch ist eine kleine commandline App mit 1,43MB nicht gerade klein
EDIT: Ach, nochwas... Um die Ergebnisse nicht zu verfälschen, sollte man immer im PyInstaller-Verzeichnis das cache Verzeichnis löschen
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Du musst wohl in der setup.py angeben, dass die zlib auch mit eingepackt werden soll.jens hat geschrieben:Mit py2exe gibt es allerdings einen Fehler, beim starten der EXE:
zipimport.ZipImportError: can't decompress data; zlib not available
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Nun gut. Ich sehe das anders. Solange nicht für jede `print` Zeile 1,43 MB dazukommen is es kein Problem. Denn ich denke mal, das eine EXE ein wenig mehr Beinhaltet, als nur das Programm oder? Ich denke mal, 1,4 MB sind dann allein EXE-Logik (was auch immer ) und danach folgt das Program. Kannst ja mal austesten, inwieweit sich der Wert ändert, bei 5 `print` Anweisungen (am besten die gleichen!). Währe mal interessant.Dennoch ist eine kleine commandline App mit 1,43MB nicht gerade klein
MfG EnTeQuAk
- Sr4l
- User
- Beiträge: 1091
- Registriert: Donnerstag 28. Dezember 2006, 20:02
- Wohnort: Kassel
- Kontaktdaten:
py2exe und PyInstaller sind beides nur (kann man das so sagen? ) Linker.
Sie erschaffen ein minimales Python das 3kb Script zum Beispiel wird auch immer noch interpretiert und zum Interpretieren braucht Python halt sich selber mit allen seinen möglichkeiten was sich in der Größe zeigt und auch bei den GUIs wird alles mitgelifert.
Hat den Nachteil: große Programme, Vorteil lauffähig weil alles dabei ist auch auf unterschielichen Betriebs Systemen (sogar Wine tauglich).
Sie erschaffen ein minimales Python das 3kb Script zum Beispiel wird auch immer noch interpretiert und zum Interpretieren braucht Python halt sich selber mit allen seinen möglichkeiten was sich in der Größe zeigt und auch bei den GUIs wird alles mitgelifert.
Hat den Nachteil: große Programme, Vorteil lauffähig weil alles dabei ist auch auf unterschielichen Betriebs Systemen (sogar Wine tauglich).
-
- User
- Beiträge: 196
- Registriert: Sonntag 1. Januar 2006, 20:12
- Wohnort: aus dem hohen Norden....
Stimmt! Der PyInstaller hat es aber bedingt in sich, von einigen Modulen etc. nur das zu nehmen, was er wirklich zum ausführen braucht.Sr4l hat geschrieben:Sie erschaffen ein minimales Python das 3kb Script zum Beispiel wird auch immer noch interpretiert und zum Interpretieren braucht Python halt sich selber mit allen seinen möglichkeiten was sich in der Größe zeigt und auch bei den GUIs wird alles mitgelifert.
Hat den Nachteil: große Programme, Vorteil lauffähig weil alles dabei ist auch auf unterschielichen Betriebs Systemen (sogar Wine tauglich).
Das habe ich nur anhand der Option Tk gemerkt: Gibt man diese nicht an, so wird nur brauchbares gepackt. Gibt man diese an, ist der gesamte tcl-Ordner wie halt bei py2exe mit dabei.
-
- User
- Beiträge: 1790
- Registriert: Donnerstag 28. Oktober 2004, 16:33
- Wohnort: Graz, Steiermark - Österreich
- Kontaktdaten:
Das sind nur Lösungen für Situationen wo du kein Python installieren kannst/willst. Da spielen Dateigrößen keine Rolle. Ansonsten ist noch rpython eine Idee.
TUFKAB – the user formerly known as blackbird
-
- User
- Beiträge: 196
- Registriert: Sonntag 1. Januar 2006, 20:12
- Wohnort: aus dem hohen Norden....
pyinstaller macht das vollautomatisch. *cool*
Man kann jedoch beim Erstellen der makespec Optionen übergeben.
Siehe auch meinem [wiki=PyInstaller-Tutorial_für_Windows]PyInstaller-Tutorial[/wiki].
Das wären Optionen wie etwa besondere Codierungen, Icons, mit Konsole oder als Windowsanwendung etc.
Falls es Table of contents ist was Du suchst, dort ist es tatsächlich möglich, 'PYMODULE' einzubinden.
Was hättest Du denn gern eingebunden?
Gruß Andy
Man kann jedoch beim Erstellen der makespec Optionen übergeben.
Siehe auch meinem [wiki=PyInstaller-Tutorial_für_Windows]PyInstaller-Tutorial[/wiki].
Das wären Optionen wie etwa besondere Codierungen, Icons, mit Konsole oder als Windowsanwendung etc.
Falls es Table of contents ist was Du suchst, dort ist es tatsächlich möglich, 'PYMODULE' einzubinden.
Was hättest Du denn gern eingebunden?
Gruß Andy