Seite 1 von 1

PyInstaller: welche Module Verusachen Probleme?

Verfasst: Dienstag 10. Dezember 2024, 11:37
von GMAch
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).

Re: PyInstaller: welche Module Verusachen Probleme?

Verfasst: Dienstag 10. Dezember 2024, 12:03
von sparrow
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.

Re: PyInstaller: welche Module Verusachen Probleme?

Verfasst: Dienstag 10. Dezember 2024, 12:53
von GMAch
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.

Re: PyInstaller: welche Module Verusachen Probleme?

Verfasst: Dienstag 10. Dezember 2024, 19:33
von snafu
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.

Re: PyInstaller: welche Module Verusachen Probleme?

Verfasst: Donnerstag 12. Dezember 2024, 08:35
von GMAch
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?

Re: PyInstaller: welche Module Verusachen Probleme?

Verfasst: Donnerstag 12. Dezember 2024, 12:30
von sparrow
@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.

Re: PyInstaller: welche Module Verusachen Probleme?

Verfasst: Freitag 3. Januar 2025, 14:07
von grubenfox
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...

Re: PyInstaller: welche Module Verusachen Probleme?

Verfasst: Freitag 3. Januar 2025, 15:55
von __blackjack__
@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.

Re: PyInstaller: welche Module Verusachen Probleme?

Verfasst: Samstag 4. Januar 2025, 02:30
von DeaD_EyE
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

Re: PyInstaller: welche Module Verusachen Probleme?

Verfasst: Samstag 4. Januar 2025, 09:49
von noisefloor
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