Frozen binary / Pyinstaller / Datengröße

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
Schwarzer Wolf
User
Beiträge: 56
Registriert: Donnerstag 5. Januar 2017, 05:24

Ich Grüße Euch :D

Ich habe mal eine allgemeine Frage zu 'pyinstaller':

Mein relativ kleines Programm ist als 'Frozen binary' ca. 500 MB groß trotz 'upx-ucl' unter Debian. Mir ist klar, dass 'pandas' etwas Platz braucht, aber von ca 40 MB (ohne 'pandas' und 'upx-ucl') auf das ca. 10-Fache ist doch etwas ärgerlich. Gibt es irgendeine Möglichkeit, das irgendwie kleiner zu bekommen (außer die ganze Sache webbasiert in Django aufzuziehen). :roll:

Wünsche Euch einen schönen Tag
Wer in der Wildnis lebt, muss zum Wolf werden, oder als Schaf sterben.
(Syrisches Sprichwort)
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@Schwarzer Wolf: Du mußt Dir halt anschauen, was wirklich alles importiert wird. pandas hat ja einige Abhängigkeiten. upx-ucl bringt so gut wie gar nichts, weil das nur binäre Executables packt, also bei pyinstaller den Bootstrap-Loader, der dafür sorgt, dass das eigentlich Python entpackt wird.
Benutzeravatar
Schwarzer Wolf
User
Beiträge: 56
Registriert: Donnerstag 5. Januar 2017, 05:24

Sirius3 hat geschrieben:@Schwarzer Wolf: Du mußt Dir halt anschauen, was wirklich alles importiert wird. pandas hat ja einige Abhängigkeiten.
Kann ich das kleiner hinkriegen indem ich anstatt 'import pandas as pd' ein 'from pandas import x' mache? Oder muss ich mir eher die pyinstaller Logs ansehen? Er hat z. B. sehr viel von 'scipy' mit reingenommen.
Wer in der Wildnis lebt, muss zum Wolf werden, oder als Schaf sterben.
(Syrisches Sprichwort)
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

@Schwarzer Wolf: es genügt nicht die Größe von Pandas alleine zu betrachten. Pandas installiert Abhängigkeiten von fast 500 MB. Das kriegst Du also nicht kleiner, solange Du Pandas mitliefern willst.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@Schwarzer Wolf: Das bringt gar nichts, weil Pakete entweder ganz oder gar nicht mitgenommen werden.
Bei mir sind die drei größten Pakete:
[codebox=text file=Unbenannt.txt]
99056kb pandas
76232kb numpy
34312kb matplotlib
2676kb pytz
[/code]
da ist also scipy gar nicht dabei und das sind insgesamt schon 250Mb.
Benutzeravatar
Schwarzer Wolf
User
Beiträge: 56
Registriert: Donnerstag 5. Januar 2017, 05:24

@all

Danke (wie immer) für die schnellen antworten. Dann werde ich es nur als Sourcecode hochladen auf github, und eventuell später entweder auf Django ausweichen, bzw. wenn ich mit Mark Lutz in schätungsweise vielen Monaten fertig bin, so versuchen zu programmieren, dass ich das ohne Pandas etc. schaffe. :D
Wer in der Wildnis lebt, muss zum Wolf werden, oder als Schaf sterben.
(Syrisches Sprichwort)
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@Schwarzer Wolf: sind Dir 200Mb zu viel Speicherplatzverschwendung, oder was ist Dein eigentliches Problem damit?
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Vielleicht ist PyInstaller einfach die falsche Lösung für dich. Du könntest die Abhängigkeiten auch einfach im Rahmen einer Installationsroutine definieren und dann bei Bedarf mit pip die benötigten Pakete nachinstallieren. Das geht übrigens auch ohne Internet, sofern du die Abhängigkeiten als Wheel-Dateien (*.whl) mitlieferst. pandas und viele weitere vorgefertigte Windows-Binaries findest du übrigens hier.
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

@snafu wo ist denn der Vorteil bei diesem Vorgehen? Alles was man sich einhandelt ist eine haendisch gepflegte Installation statt einer einfach zu nutzenden Variante (sowohl fuer User als auch die Entwickler).

Es werden so jedenfalls weder Netzwerkverkehr noch Plattenplatz gespart.
Benutzeravatar
Schwarzer Wolf
User
Beiträge: 56
Registriert: Donnerstag 5. Januar 2017, 05:24

Sirius3 hat geschrieben:@Schwarzer Wolf: sind Dir 200Mb zu viel Speicherplatzverschwendung, oder was ist Dein eigentliches Problem damit?
Keine Platzverschwendung. Ich finde nur, dass 400 für das kleine Programm viel zu viel ist. Ich werde mal sehen, wie ich das auf 200 kriege. Ich weiß auch nicht, warum er z.b. scipy mit drin hat. Ich importiere das nicht.
Wer in der Wildnis lebt, muss zum Wolf werden, oder als Schaf sterben.
(Syrisches Sprichwort)
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du hast das immer noch nicht begriffen. *Du* musst scipy nicht importieren. Pandas tut das aber ggf. Wenn du da jetzt also wahllos Sachen rauskuerzt, kann es sein, dass du zur Laufzeit krachend abstuerzt. Da musst du dir schon sehr sicher sein, dass die von dir genutzen Pandas-Teile das nicht brauchen, und das du da auch nicht wenigstens in Form von importen drueber stolperst.
Benutzeravatar
Schwarzer Wolf
User
Beiträge: 56
Registriert: Donnerstag 5. Januar 2017, 05:24

__deets__ hat geschrieben:Du hast das immer noch nicht begriffen. *Du* musst scipy nicht importieren. Pandas tut das aber ggf. Wenn du da jetzt also wahllos Sachen rauskuerzt, kann es sein, dass du zur Laufzeit krachend abstuerzt. Da musst du dir schon sehr sicher sein, dass die von dir genutzen Pandas-Teile das nicht brauchen, und das du da auch nicht wenigstens in Form von importen drueber stolperst.
Das dachte ich mir fast schon. Ich war nur bezüglich des Kommentars von Sirius3 verwundert. Dann hat sich das Thema erst mal geklärt. Ich werd wie gesagt einfach nur die Source hochladen fürs Erste. :P
Wer in der Wildnis lebt, muss zum Wolf werden, oder als Schaf sterben.
(Syrisches Sprichwort)
Benutzeravatar
Schwarzer Wolf
User
Beiträge: 56
Registriert: Donnerstag 5. Januar 2017, 05:24

Also ich habe es nun auch auf ca. 200 MB bekommen, indem ich einfach ''pyinstaller -F' benutzt habe. Ich verstehe aber nun nicht, wieso er im 'one file' Modus ca. 50 % kleiner ist, als im 'normalen' Modus. Weiß jemand was darüber?

Ich danke allen für den Zeitaufwand, hab wieder etwas dazugelernt. :D
Wer in der Wildnis lebt, muss zum Wolf werden, oder als Schaf sterben.
(Syrisches Sprichwort)
Antworten