PyInstaller: welche Module Verusachen Probleme?

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
GMAch
User
Beiträge: 47
Registriert: Dienstag 4. September 2018, 07:32

Hallo ich hätte eine Frage zum kompilieren von .exe Dateien mit Py Installer oder ähnlichen Programmen.

Es gibt ja diverse Module deren Einbindung in Script dazuführt, dass diese beim kompilieren in eine .exe extrem groß wird.

Ich weiß das Numpy und verwandte Module (Scipy, Pandas) diesen Effeckt haben, gibt es noch andere gebräuchliche Module bei denen so was passiert?

Insbesondere wichtig für mich in diesem Zusammenhang wären Module zum Plotten von Daten (sprich Matplotlib), GUIs (Tkinter, PyQt, PySimpleGUI) und zur Kommunikation mit externen Geräten (Socket, PySerial).
Benutzeravatar
sparrow
User
Beiträge: 4525
Registriert: Freitag 17. April 2009, 10:28

PyInstaller kompiliert nichts. Das Pakt nur dein deinen Code, die definierten oder ermittelten Packages und den Interpreter in ein selbstentpackendes Archiv.

Und daraus ergibt sich auch automatisch, warum das schon ohne Pakete schon groß ist.

Deutlich praktikabler finde ich einfach, Python zu installieren und dann über pip einfach dein Programm zu installieren. Und wenn du das Paket richtig konfigurierst, installiert das seine Abhängigkeiten einfach mit.
GMAch
User
Beiträge: 47
Registriert: Dienstag 4. September 2018, 07:32

sparrow hat geschrieben: Dienstag 10. Dezember 2024, 12:03 PyInstaller kompiliert nichts. Das Pakt nur dein deinen Code, die definierten oder ermittelten Packages und den Interpreter in ein selbstentpackendes Archiv.
Ok ich kenn die technischen Details nicht aber es kommt hinten eine .exe raus.

sparrow hat geschrieben: Dienstag 10. Dezember 2024, 12:03 Deutlich praktikabler finde ich einfach, Python zu installieren und dann über pip einfach dein Programm zu installieren. Und wenn du das Paket richtig konfigurierst, installiert das seine Abhängigkeiten einfach mit.
ist in dem Fall nicht praktikabel. Das Endproduckt muss standalone laufen ohne das man irgendwas aufwändig installieren muss.
Benutzeravatar
snafu
User
Beiträge: 6850
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Es ist ja gar nicht mehr aufwändig. Selbst Windows hat seit längerem einen Paketmanager vorinstalliert. Ein aktuelles Python erhält man mit:

Code: Alles auswählen

winget install --id=Python.Python.3.13  -e
Das kann man ganz easy peasy in eine Batch-Datei schreiben. Anschließend ein ``pip install dein_programm`` in einem neuen venv aufrufen und schon wird es samt Abhängigkeiten auf dem System des Anwenders installiert und bleibt dabei dennoch in einer isolierten Umgebung. Dazu ist keinerlei Benutzerinteraktion notwendig, außer dass er das Install-Skript aufruft. Das machen moderne onlinebasierte Installationsroutinen im Grunde auch nicht viel anders.
GMAch
User
Beiträge: 47
Registriert: Dienstag 4. September 2018, 07:32

snafu hat geschrieben: Dienstag 10. Dezember 2024, 19:33 Es ist ja gar nicht mehr aufwändig. Selbst Windows hat seit längerem einen Paketmanager vorinstalliert. Ein aktuelles Python erhält man mit:

Code: Alles auswählen

winget install --id=Python.Python.3.13  -e
Das kann man ganz easy peasy in eine Batch-Datei schreiben. Anschließend ein ``pip install dein_programm`` in einem neuen venv aufrufen und schon wird es samt Abhängigkeiten auf dem System des Anwenders installiert und bleibt dabei dennoch in einer isolierten Umgebung. Dazu ist keinerlei Benutzerinteraktion notwendig, außer dass er das Install-Skript aufruft. Das machen moderne onlinebasierte Installationsroutinen im Grunde auch nicht viel anders.
Gibt es irgendwo eine für Amateure wie mich verständliche Beschreibung wie man das macht?

Löst das das Problem mit den ausufernden Programm Größen?
Benutzeravatar
sparrow
User
Beiträge: 4525
Registriert: Freitag 17. April 2009, 10:28

@GMAch: Es löst das Problem, dass du mit dem winget-Befehl Python installierst und dann mit einem beherzten python -m pip install <deinPaket> dein Programm installierst. Das zieht dann seine Abhängigkeiten nach.
Auf dem Zielrechner wird es aber nicht kleiner. Du bringst aber nur 2 Zeilen und der Rest wird aus dem Netz geladen. Die Pakete sind halt so groß wie sie sind. Ob das jetzt "ausufernd" ist, ist wohl eher eine Frage der Perspektive.
Benutzeravatar
grubenfox
User
Beiträge: 601
Registriert: Freitag 2. Dezember 2022, 15:49

völlig ungetesteter Gedanke: vielleicht ist ja Nuitka hier hilfreich. Dann macht das "compilieren" auch wieder Sinn. Bei Nuitka fällt vorne Python-Code rein und irgendwo hinten fällt C-Code raus der dann durch einen C/C++ Compiler gejagt wird... aber ob dabei die entstehende exe-Datei durch die importierten Module (z.b. Numpy, Scipy, Pandas) kleiner wird, glaube ich jetzt nicht. Es entfällt wohl nur das Handling mit winget, pip usw...
Benutzeravatar
__blackjack__
User
Beiträge: 13998
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@grubenfox: Nicht wirklich, denke ich, denn das was da aus dem Compiler herausfällt, braucht ja trotzdem die Standardbibliothek und alle Bibliotheken die man sonst noch so verwendet, von dem nun kompilierten Code aus. Das heisst daraus dann einen Installer zu bauen, hat im Grunde genau die gleichen Probleme.
“The best book on programming for the layman is »Alice in Wonderland«; but that's because it's the best book on anything for the layman.” — Alan J. Perlis
Benutzeravatar
DeaD_EyE
User
Beiträge: 1219
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Nuitka erzeugt kleinere exe-Dateien.
Hier der Beweis:

Code:

Code: Alles auswählen

from tkinter import Tk, Button

root = Tk()
Button(root, text="Close", command=root.destroy).pack()
root.mainloop()
Nuitka:

Code: Alles auswählen

[deadeye@nexus ~]$ nuitka --enable-plugin=tk-inter --onefile test.py
...
[deadeye@nexus ~]$ du -h test.dist/test.bin 
13M     test.dist/test.bin
PyInstaller:

Code: Alles auswählen

[deadeye@nexus ~]$ pyinstaller -F test.py
[deadeye@nexus ~]$ du -h dist/test 
60M     dist/test
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Benutzeravatar
noisefloor
User
Beiträge: 4172
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

Vermutung: Nuitka erzeugt C-Code und linkt diesen (statisch) gegen libpython. D.h. der ganze Python Quellcode der kompletten Python-Installation entfällt als Python Code. AFAIK packen Pyinstaller und Co. das alles mit in die exe-Datei mit ein.

Wie sich das verhält, wenn man viele externe Module mit einbindet, weiß ich nicht. Soweit ich die Doku von Nuitka verstehe, wird alles, was Python ist, zu C kompiliert.

Gruß, noisefloor
Antworten