Phyton Weitergabe als *.exe, sehr groß

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
tomPyhton
User
Beiträge: 11
Registriert: Donnerstag 23. Mai 2019, 17:19

Habe ein kleines Tool geschrieben, welches mir einige Informationen aus Windows ausliest. Soweit auch klappt dies gut.

Dies möchte ich nun gern weitergeben, damit es auch andere Kollegen in meinem Unternehmen nutzen können. Allerdings ist auf den System wo es genutzt werden soll, kein Python installiert.
Daher hab ich das ganze als *.exe mit PyInstaller verpackt. Dies ist nun allerdings größer als 40 MB. Damit könnte ich mich gerade noch abfinden, obwohl es schon arg groß ist.

Doch was passiert bei Programmen welche komplexer sind? Da wird die *.exe dann 400 MB und größer? Gibt es keinen Weg damit es am Ende kleiner wird zum weitergeben.

Noch was, derzeit laufen die Programme hauptsächlich unter Windows, allerdings hab ich auch ein paar Freunde welche einen Mac haben und einiger dieser Tool gebrauchen können.
Benutzeravatar
sparrow
User
Beiträge: 4193
Registriert: Freitag 17. April 2009, 10:28

Python ist eine interpretierte Sprache. Das heißt, du brauchst einen Interpreter. Entweder müssen deine Kollegen einen entsprechenden Interpreter installieren, oder du lieferst ihn mit. Das ist das, was Pyinstaller tut: Es nimmt den Python-Interpreter aus deinem Environment und liefert die mit. Deshalb ist das Programm auch so groß, eben weil der Interpreter darin steckt.

Unter MacOS sollte Python installiert sein. Wenn nicht solltest du deinen Kumpels ans Herz legen eben dies zu tun.
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

@tomPyhton: Du mußt schauen, welche Bibliotheken Du wirklich brauchst, und welche PyInstaller denkt, dass er braucht. Je nachdem, was Dein Programm wirklich benutzt, können da leicht auch ein paar mehr Megabytes zusammenkommen.
Benutzeravatar
DeaD_EyE
User
Beiträge: 1020
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Heutzutage ist das nicht mehr ganz so wichtig, dass Programme klein sind.

Viele Anwendungen, die ich gesehen habe, nutzen einen Chrome + Electron + JavaScript in einer Runtime zusammengepackt.
Die sind auch recht groß. Irgendwie fragt keiner danach, wieso diese Dateien so groß sind.
Alles, was irgendwie Klicki-Bunti ist, darf bis ~ 100 MiB groß sein.

Wenn dein Tool aber z.B. nur in der Kommandozeile arbeitet, wird der Nutzer sich definitiv über die Größe beschweren.
Bei GUI-Applikationen weiß man vorher schon, dass diese größer sind und das ist auch allgemein von dem Nutzer akzeptiert.

PS: Auf installierte Runtimes kann und darf man sich nicht verlassen. Selbst unter Linux ist das problematisch, wenn man sehr neue Sprach-Features nutzt wie z.B. f-strings.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Benutzeravatar
__blackjack__
User
Beiträge: 13103
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

f-Strings und neu: Python 3.6 gibt es seit 2016, das letzte Bugfix-Release (im Sinne von „da kommen keine mehr, auch wenn Fehler entdeckt werden“) war 2018 und Sicherheits-Updates gibt es dafür noch bis inklusive nächstes Jahr.

Man kann sich bei älteren LTS-Linuxdistributionen also noch nicht auf f-Strings verlassen, aber das Ende dieser Zeit ist absehbar.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
tomPyhton
User
Beiträge: 11
Registriert: Donnerstag 23. Mai 2019, 17:19

Rein Theoretisch ist es machbar ein kleines Tool zu schreiben, welches folgende Infos aus einem Windows System ausliest:
Seriennummer, Lizenzcode, TeamViewerID und am Ende als *.txt speichert.

Das ganze dann als *.exe verpacken und auf einem Windows System ausführen. Meint ihr, da kommt man mit 3-4 MB hin?
Benutzeravatar
sparrow
User
Beiträge: 4193
Registriert: Freitag 17. April 2009, 10:28

Hast du mal geschaut, wie groß der Interpreter ist?
tomPyhton
User
Beiträge: 11
Registriert: Donnerstag 23. Mai 2019, 17:19

Wo soll ich da schauen? Verstehe ehrlich gesagt nicht wonach ich genau schauen soll?
Benutzeravatar
sparrow
User
Beiträge: 4193
Registriert: Freitag 17. April 2009, 10:28

Na, schon alleine die pythonxx.dll hat fast 4 MB.
tomPyhton
User
Beiträge: 11
Registriert: Donnerstag 23. Mai 2019, 17:19

Verstanden, also ist es da schon mal nicht möglich dies so klein zu bekommen.
__deets__
User
Beiträge: 14539
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du kannst auf C/C++/Rust bauen, die liefern deutlich kompaktere Executables. Zum höheren entwicklungsaufwand.
tomPyhton
User
Beiträge: 11
Registriert: Donnerstag 23. Mai 2019, 17:19

Dafür mus ich dann ja aber erst C/C++ erlernen.
__deets__
User
Beiträge: 14539
Registriert: Mittwoch 14. Oktober 2015, 14:29

Joa. Wenn dein Problem kein Nagel ist, musst du den Hammer weglegen & lernen, den Schraubenzieher zu benutzen. So ist’s halt.
tomPyhton
User
Beiträge: 11
Registriert: Donnerstag 23. Mai 2019, 17:19

Eine Frage zu der ganzen Thematik hätte ich noch.
Auf welcher Version basieren die UI bei Python? Bei Delphi weiß ich, sie setzen auf Windows Controls (WinAPI) und sind daher schon in Windows enthalten. Und somit kommt das Programm in Delphi auch kleiner.
Gibt es dies vlt. für Python auch und ich habe nur durch den Designer von QT solche große EXE erhalten. Wäre bei der Verwendung einer anderen GUI Plattform die EXE am Schluss kleiner?
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

@tomPyhton: jetzt kommst Du endlich mit der Sprache raus, was ich schon ganz zu Anfang gefragt hatte. Ja PyQT braucht etliche 100MB. tkinter ist kleiner und kommt schon mit Python mit.
tomPyhton
User
Beiträge: 11
Registriert: Donnerstag 23. Mai 2019, 17:19

Ok mit TKInter ist das ganze jetzt auf einmal nur noch 8 MB groß. Jetzt ist allerdings noch das Problem das die *.exe durch das verlinken eine Startverzögerung hat. Gibt es Mittel und Wege wie man dies umgehen kann?

Oder anders gefragt, wie verbreitet ihr eine Python Datei, sodass sie überall genutzt werden kann, ohne Python installiert zu haben?
Benutzeravatar
sparrow
User
Beiträge: 4193
Registriert: Freitag 17. April 2009, 10:28

Welches verlinken?
Was du da umher trägst in ein selbstentpackendes Archiv. Wenn du die Datei ausführst, dann wird zuerst einmal das Archiv entpackt. In dem Archiv befinden sich dein Script, der Interpreter, benötigte Module, benötigte Bibliotheken. Verlinkt wird nichts, weil - wie ich schon einmal schrieb - Python eine interpretierte Sprache. Da wird nichts verlinkt.

Wenn auf dem Zielsystem kein Python da ist, Pyinstaller.
Aber dafür ist Python halt nicht gedacht.
Antworten