Linux: Python 3 Programme ausliefern?
Wie liefert man am besten Python Programme mit allem drum und dran aus?
Weil nur die .py ist ja nicht wirklich sinnvoll, dann hat man noch allerhand Abhängigkeiten, etc.
(zB ist es ziemlich unpraktisch, wenn der Nutzer erstmal in einer Datei nachschauen muss, was er vorher alles installieren muss. Da muss er dann zB erstmal tkinter / pyqt5 und pip installieren, anschließend mit pip dann noch was, usw.)
Wie kann man das unter Linux am sinnvollsten (für Linux, gerne aber auch zusätzlich für andere Systeme) "packen"? Am besten wär eine Binary, die man dann einfach ausführen kann.
Ich stelle mir das vom Prinzip her so wie bei Firefox ESR vor, dass man ein Archiv hat, was man entpacken muss, wo dann eine Binary drinnen ist, die man einfach ausführen kann, ohne vorher noch irgendwas weiteres installieren zu müssen.
4 Antworten
zB ist es ziemlich unpraktisch, wenn der Nutzer erstmal in einer Datei nachschauen muss, was er vorher alles installieren muss
... dafür kann man zB eine requrements.txt erstellen die von pip verarbeitet werden kann.
Wie kann man das unter Linux am sinnvollsten (für Linux, gerne aber auch zusätzlich für andere Systeme) "packen"?
... indem du .deb oder .rpm Pakete für die entsprechenden Distributionen baust!
Ich stelle mir das vom Prinzip her so wie bei Firefox ESR vor, dass man ein Archiv hat, was man entpacken muss, wo dann eine Binary drinnen ist, die man einfach ausführen kann, ohne vorher noch irgendwas weiteres installieren zu müssen.
... das entspricht nicht der üblichen Methode Software in Linux zu installieren aber man kann sowas auch machen.
cx_Freeze oder Nuitka sollten das für dich erledigen.
Man kann je nach Distribution deb oder rpm-Pakete erstellen. Falls man debian, ubuntu, Linux Mint oder eines der Devirate hat, gibt es dazu das Tool debreate https://antumdeluge.github.io/debreate-web/ Damit kann man DEB-Pakete erstellen. Man macht zuerst die .py-Datei ausführbar und fügt sie dann zu seinem debreate-Projekt hinzu. Dort kann man dann auch die Abhängigkeiten angeben. Wenn dann der Nutzer das deb-Paket installiert werden automatisch die benötigten Abhängigkeiten aus der Paketverwaltung der Distribution mitinstalliert.
Debreate wurde in Python geschrieben und ist Prozessorunabhängig. Das lässt sich auch bei einem Raspberry Pi unter Raspbian installieren und dort auch verwenden.
Du denkst irgendwie wie ein Windowsnutzer. ;)
Unter Linux wird Software grundsätzlich via Paketverwaltung installiert. Also: Setze ein Repo auf Gitlab/Github/... auf, wo die Quelldateien plus eine Readme mit Installationsanweisungen zu finden sind, erstelle ggf. selbst Pakete für die Distro, die du selbst nutzt und warte, bis Leute deine Software entdecken und Pakete für andere Distros basteln. Wenn du nicht warten willst, melde dich in den Foren der größten Distros an, stelle dein Projekt vor und bitte um Packaging.
Für Arch Linux kann ich zum Beispiel gerne eine PKGBUILD fürs AUR aufsetzen.
Mir kommt da PyInstaller in den Sinn.