Gibt es einen standard-Weg zum erstellen von Debian-Paketen für die Verteilung von Python-Programmen?
Es gibt eine Tonne von Informationen auf, wie dies zu tun, aber da "es gibt mehr als einen Weg, um der Haut eine Katze", und alle die tutorials/Anleitungen, die Abdeckung ein bisschen den Prozess zu machen scheinen bestimmte Annahmen, die von anderen tutorials, die ich noch nicht geschafft, es zu begreifen.
Bisher dies ist, was ich glaube ich verstanden.
- Meine endgültige Ziel sollte sein, dass der Schaffung eines "binary" .deb-Paket. Ein solches Paket wird Plattform-unabhängig (32/64 bit) wie alle Python-Programme sind solche.
- Auf die Schaffung einer "binären" Paket muss ich zuerst erstellen Sie ein source-Paket.
- Zu erstellen, das source-Paket kann ich entweder
CDBS
oderdebhelper
. Debhelper ist die empfohlene Methode für Anfänger. - Den Kern der Erstellung einer Quellcode-Paket ist, bevölkern die
DEBIAN
Verzeichnis im source-Verzeichnis mit Anzahl der Dateien klären, wo die Dateien kopiert werden müssen, was Urheberrecht und Lizenzierung unterliegen Sie, welche Abhängigkeiten Sie haben, etc... - Schritt #4 kann weitgehend automatisiert werden, die
dh_make
Befehl wenn das Python-source kommt auch mit einem distutils'setup.py
Skript.
Nun meine Fragen:
- Ist mein Verständnis des Prozesses korrekt? Ist es etwas, was ich vermisse, oder was hab ich falsch gemacht?
- Schritt #5 ist wirklich mehr verwirrend für mich: insbesondere die zwei Punkte, bleibt sehr undurchsichtig für mich:
- Wie Schreibe ich eine
setup.py
- Skript, die Installation einer stand-alone-Programm? EDIT: Von standalone-Programm ich meine ein Programm verwendet werden soll, indem Sie desktop-Benutzer (im Gegensatz zu einer Modul, die ich verstehe, wie eine Sammlung von Funktionen verwendet werden, die von anderen software, nachdem Sie importiert wurden). In meinem konkreten Fall würde ich tatsächlich brauchen zwei solche "Programme": das Hauptfenster der software und ein separates Dienstprogramm (in der Tat ein zweites "Programm" sollte in das gleiche Paket mit den anderen). - Was sind die Besonderheiten für ein solches Skript für DEB-Pakete? Die offizielle Dokumentation nur scheint der deal mit der U /MIN und Windows-Zeug...
- Wie Schreibe ich eine
BTW: das sind die besten Informationsquellen, die ich finden konnte, mich so weit. Wenn Sie etwas besser als diese, bitte teilen! 🙂
- Ubuntu Python-Verpackung-Anleitung
- Erstellen einer .deb-Paket von python setup.py (es zeigt die Schritte, aber es funktioniert nicht erklären genug für mich zu Folgen zusammen)
- ShowMeDo video auf "anlegen .deb-Paket aus einem python
Programm" (es scheint nicht up-to-date und - wenn ich es Recht - produzieren-Pakete für den persönlichen Gebrauch, ohne Abhängigkeiten
und ohne unterschriebene changelog und andere wichtige Daten zu machen, dass es nicht kompatibel mit den Debian-Richtlinien).
- Bevor Sie vorbereiten können Sie ein python-Programm für Binär-Verpackung, müssen Sie bereiten Sie es für die Allgemeine Verteilung. Das ist die
setup.py
bit. Dies ist vergleichbar mit derautotools
Schritt viele GNU C/C++ Projekte verwenden, aber spezifisch für python. Dies ist einfacher als es klingt, Lesen Sie docs.python.org/distutils/index.html - Danke, ich habe bereits die Allgemeine Idee (meine Formulierung mag falsch sein, aber das ist der Teil 5 der Prozess, den ich beschrieben). Was mich verwirrt ist, dass in den offiziellen Unterlagen, die ich nicht finden konnte, eine explizite how-to, wie zu verteilen Stand-alone-Programme statt-Module. Vielleicht ist es nur ein Terminologie-problem und das, was ich bezeichne als "standalone-Programme" sind ein bestimmter Typ der Module?
- Sie können die install-Skripte, D. H. ausführbare Dateien starten Sie Ihr Programm. Siehe docs.python.org/distutils/setupscript.html#installing-scripts
- Ich habe gelesen, dass vor, aber ich bin immer noch verwirrt: mein Programm hat eine
main.py
- Datei (ich nehme an, Sie nennen könnte es ein "Skript") UND eine Reihe von Modulen UND einigen anderen YAML-und SVG-Dateien... ich bin immer noch kämpfen, um zu finden, die klare Dokumentation, wie Sie zu erreichen. Die beste die ich finden konnte, so weit ist die distutils-tutorial, die ich noch am studieren... - Durch das standalone-Programm meinst du etwas, was nicht python, als Abhängigkeit? Die jüngsten Veröffentlichungen von Debian und Ubuntu, beide kommen mit mindestens python 2.6, so dass, wenn Sie code 2.6-kompatibel, ein "standalone-Programm" kann in der Tat nur ein besonderer Fall von einem Modul, wie Sie vorgeschlagen.
- Danke für das Auffinden der Zweideutigkeit meiner Terminologie, versuchte ich zu klären, durch Bearbeiten der ursprünglichen Frage oben.
- Machen Sie ein kleines python/shell-Skript, das startet dein Programm. Dies könnte so einfach wie
python /path/to/program.py
. Machen Sie es ausführbar und legen Sie es irgendwo wie/usr/local/bin
. Dies sollte ausreichen, um das Verhalten, die Sie wollen. - Ja, all das sollte möglich sein. Ihre main.py ist ein Skript, Ihre anderen Python-Dateien sind wahrscheinlich ein Paket (oder mehreren Paketen). Die YAML-und SVG-Dateien sind Paket-Daten oder Daten-Dateien.
- Ich denke, was Sie tun möchten, ist etwas gemeinsames in Debian, aber nicht nativ unterstützt von distutils: Sie Haben eine Anwendung, bestehend aus Modulen und einem Läufer-Skript, ohne die Module installiert und der öffentlichkeit zugänglich gemacht in site-packages. Gajim zum Beispiel nicht, dass durch die Installation-Module in /usr/share/gajim und Bearbeiten sys.Pfad in der Läufer-Skript.
- Es sieht aus als ob das Ubuntu-Referenz verschoben und ist nun "deprecated". Aber ich habe nicht vor Ort eine Erklärung, warum es als veraltet betrachtet.
- mögliche Duplikate von Wie mache ich Debian packaging von Python-package?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sieht es aus wie stdeb wird tun, was Sie wollen.
Auch für die Installation von scripts, ich empfehle verteilen Sie die console_scripts Einstiegspunkt unterstützen.
Dieser Artikel von Barry Warsaw half mir immer ganz weit durch den Prozess. Ich hatte noch eine Menge tun, um die Suche auf der Seite, obwohl, und ich lese die meisten Ubuntu packaging guide einige Zeit in der Vergangenheit.
Habe eine gute
setup.py
ist ein wirklich guter Rat. Ich habe diese beiden Anleitungen ganz gut:Den richtigen Weg zum Aufbau eines deb-Paket ist mit
dpkg-buildpackage
aber manchmal ist es ein wenig kompliziert. Stattdessen können Siedpkg -b <folder>
und es wird erstellen Sie Ihre Debian-Paket.Diese sind die Grundlagen für die Erstellung eines Debian-Pakets mit
dpkg -b <folder>
mit einem binären oder mit jeder Art von Skript, das automatisch ausgeführt, ohne manuelle Kompilierung (Python, Bash, Pearl, Ruby):Des scripts platziert
/usr/bin/
sind direkt von dem terminal, beachten Sie, dass ich nicht fügen Sie eine Erweiterung für das Skript. Sie können auch feststellen, dass die Struktur des deb-Paketes wird die Struktur des Programms, sobald es installiert ist. Also, wenn Sie dieser Logik Folgen, wenn Ihr Programm eine einzelne Datei, können Sie direkt unterProgramName-Version/usr/bin/your_script
, aber wenn Sie mehrere Dateien haben, platzieren Sie Sie unterProgramName-Version/usr/share/ProgramName/all your files
und legen nur eine Datei unter/usr/bin/
aufrufen, werden Ihre Skripts/usr/share/ProgramName/
Ändern Sie die Berechtigung Ordner root:
Ändern Sie das Skript Berechtigungen:
Schließlich können Sie ausführen:
dpkg -b /path/to/the/ProgramName-Version
und Ihre deb-Paket erstellt werden! (Sie können auch hinzufügen, die post - /pre-inst-Scripte und alles, was Sie wollen, es funktioniert wie ein normales Debian-Paket)Hier ist ein Beispiel für die
control
- Datei. Sie müssen nur copy-paste in eine leere Datei namens "control" und legen Sie es in den DEBIAN-OrdnerGibt es einige Bibliotheken gibt, die abstrakten Weg alle notwendigen Schritte und lassen verwandeln Sie Ihr python-Paket in ein debian-Paket mit einem einzigen Befehl.
Vorausgesetzt, Ihr python-Paket hat bereits die
setup.py
, in das Verzeichnis, wosetup.py
befindet, den Sie verwenden könnten:stdeb (Schon erwähnt in diesem Antwort, installieren Sie mit
pip install stdeb
). Erstellen Sie ein debian-Paket, Ausführung:Ausgabe
.deb
- Datei wird inbdist_deb
Verzeichnis.fpm (installieren mit
gem install --no-ri --no-rdoc fpm
). Erstellen Sie ein debian-Paket, Ausführung:py2deb (installieren mit
pip install py2deb
). Erstellen Sie ein debian-Paket, Ausführung:Jede dieser Bibliotheken hat eigene Vorbehalte, so möchten Sie vielleicht zu versuchen, was funktioniert am besten für Sie.