Python Programm mit tkinter ausliefern?

2 Antworten

Python-Programme kann man auch in EXE-Dateien kompilieren. Das geht so. Ich gehe davon aus das man Windows verwendet.

Zuerst muss das Python-Modul pyinstaller installiert sein. Dann erstellt man sich einen Ordner (z.B. Python-Projekte). Dort das geschriebene Python-Programm abspeichern. Dann von dort die Eingabeaufforderung aus aufrufen und folgenden Befehl eingeben:

  • pyinstaller programmname.py

Das erzeugt in dem Ordner Python-Projekte 3 weitere Ordner: Einmal build, dist und __pycache__ Die Ordner build und __pycache__ können nach dem Kompilieren gelöscht werden. Im Ordner dist befindet sich ein weiterer Ordner mit dem Namen programmname. Dort drin befindet sich die programmname.exe und die Laufzeitbibliotheken (DLLs, weitere Dateien und weitere Unterordner). Auch die tkinter-Laufzeitbibliothek ist dabei. Das ganze zusammen ist dann selbstständig ohne Python ausführbar.

Als letzten Schliff hat man noch die Möglichkeit das ganze mit Inno Setup http://www.jrsoftware.org/download.php/is.exe in eine Installationsroutine zu verpacken. Dazu muss man den kompletten Ordnerinhalt programmname inkl. aller Unterordner in sein Inno Setup Projekt hinzufügen. Inno Setup verpackt das dann in eine setup.exe. Ideal wenn man sein Programm weitergeben möchte.

Unter Linux (z.B. debian, ubuntu, Linux Mint und die Devirate) macht man es so: Zuerst das geschriebene Python-Programm ausführbar machen. Dann kann man es mit dem Tool debreate https://antumdeluge.github.io/debreate-web/ in ein DEB-Paket verpacken. Dann das Paket so erstellen das als Abhängigkeit die Pakete python python-minimal python3 python3-minimal python-tk python3-tk verlangt wird. Wenn dann der Nutzer dieses erstellte DEB-Paket installiert, werden automatisch diese Abhängigkeiten mitinstalliert.

LiemaeuLP 
Fragesteller
 15.12.2019, 09:40

Ich verwende Linux ;)

0
LiemaeuLP 
Fragesteller
 15.12.2019, 10:46

.deb Pakete sind halt nur für Debian-basierende Linux Distributionen. Ich hätte es gerne distributionsunabhängig.

0
mnlwrnr  15.12.2019, 21:40
@LiemaeuLP

Dann sollte man das auch unter Linux mit pyinstaller kompilieren, dann hat man es wie bei der Windows-Variante als ausführbare Binärdatei mit dem Namen programmname und die Laufzeitbibliotheken. Dann sollte man dann aus dem ganzen ein .Appimage erstellen. Dazu das mal durchlesen: https://forum.ubuntuusers.de/topic/appimage-aus-debian-paketen-erstellen/

.Appimage ist unabhängig von der Linux-Distro. Dann muss der Nutzer das .Appimage auf dem Zielsystem nur noch ausführbar machen.

1

Du kannst Python-Programme für diverse Systeme zB mit cx_Freeze oder Nuitka packen. Dann musst nicht mal der Interpreter installiert sein!

Woher ich das weiß:Berufserfahrung – Softwareentwickler f. Web, Win. & Linux (seit 2001)
LiemaeuLP 
Fragesteller
 15.12.2019, 10:54
cx_Freeze scheint es nur für Windows & macOS zu können, ich brauch es leider aber für Linux.

Wie macht man das denn mit Nuitka? Ich habs schon wie in der Dokumentation mit --follow-imports versucht, dann wird Tkinter aber nicht mit reingepackt, mit —recurse-all und —stabdalone spuckt das Zielsystem (im Test Ubuntu 18.04) einen Fehler aus, dass Tcl nicht installiert ist (hab mit apt geschaut, tcl ist nicht vorinstalliert). Tcl zu installieren bringt aber nichts, dann hab ich ja schon wieder ne Abhängigkeit :/ (dann könnte man es auch gleich bei „installiere tkinter“ belassen)
0
Mark Berger  15.12.2019, 12:33
@LiemaeuLP

Für Linux würde ich eher ein deb- oder rpm-paket bauen. Das macht da deutlich mehr Sinn!

1
Mark Berger  15.12.2019, 13:24
@LiemaeuLP

Ja dann musst halt Pakete für die diversen Distros bauen - machen ja alle anderen auch so... Schau dir doch die Downloads von Skype, Chrome, etc. an!

1