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).
PyInstaller: welche Module Verusachen Probleme?
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.
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.
Ok ich kenn die technischen Details nicht aber es kommt hinten eine .exe raus.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.
ist in dem Fall nicht praktikabel. Das Endproduckt muss standalone laufen ohne das man irgendwas aufwändig installieren muss.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.
Es ist ja gar nicht mehr aufwändig. Selbst Windows hat seit längerem einen Paketmanager vorinstalliert. Ein aktuelles Python erhält man mit:
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.
Code: Alles auswählen
winget install --id=Python.Python.3.13 -e
Gibt es irgendwo eine für Amateure wie mich verständliche Beschreibung wie man das macht?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: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.Code: Alles auswählen
winget install --id=Python.Python.3.13 -e
Löst das das Problem mit den ausufernden Programm Größen?
@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.
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.
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...
_______________________________________________________________________________
https://www.python-kurs.eu/index.php
https://learnxinyminutes.com/docs/python/ https://learnxinyminutes.com/docs/de-de/python-de/
https://quickref.me/python https://docs.python-guide.org/
- __blackjack__
- User
- Beiträge: 13997
- 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
- DeaD_EyE
- User
- Beiträge: 1218
- Registriert: Sonntag 19. September 2010, 13:45
- Wohnort: Hagen
- Kontaktdaten:
Nuitka erzeugt kleinere exe-Dateien.
Hier der Beweis:
Code:
Nuitka:
PyInstaller:
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()
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
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
- 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
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