Diese Frage soll diese ergänzen . Ich habe eine Python-App, die Drittanbieter-Module von PyPI verwendet. Ich möchte meine App in ein Debian-Paket packen, weiß aber nicht, wie ich mit Python-Abhängigkeiten umgehen soll, die sich nicht in Debian / Ubuntu-Repositories befinden (auch als Debian-Pakete gepackt).
Lösung 1:
Bauen Sie die Module von PyPI direkt in mein Debian-Paket ein.
Lösung 2:
Erstellen Sie Debian-Pakete für alle PyPI-Module, die ich mit stdeb benötige, und fügen Sie sie zu Debian / Ubuntu-Repositorys hinzu.
Ich brauche tatsächlich eine Lösung Nr. 3, weil ich PyPI-Abhängigkeiten installieren möchte, wenn ich mein Debian-Paket installiere, am besten in einer virtuellen Umgebung!
Was wäre Lösung 3 ? Muss ich das DEBIAN / Preinst- Betreuer-Skript optimieren ?
quelle
.deb
Datei verteilen oder ein privates Repository oder eine PPA in Launchpad einrichten.Antworten:
Ich habe mit einigen Betreuern des Debian-IRC-Kanals irc: //irc.debian.org#debian-mentors gesprochen und genau das Gleiche gefordert , und der allgemeine Konsens war:
Lösung 1:
Das Integrieren von Abhängigkeiten in Ihr Paket durch Kopieren der Quelldateien als einzelne Codebasis wird sehr verpönt. Dies würde den Zweck eines Paketsystems zunichte machen, das Abhängigkeiten, Aktualisierungen, Versionsverwaltung usw. handhabt.
Lösung 3:
Das direkte Herunterladen von Nicht-Debian-Paketen bei der Installation von binary (
.deb
) ist ein ernstes Sicherheitsrisiko, definitiv ein Nein-Nein. Sie könnten die Abhängigkeiten nicht einmal untersuchen, indem Sie die extrahierendeb
, da sie bei der Installation heruntergeladen und installiert werden. Dieser Ansatz umgeht das Repository-System vollständig. Kein betroffener Benutzer würde sich über ein Paket freuen, das hinter den Kulissen (und wieroot
gesagt!) Zusätzliche nicht vertrauenswürdige Software von nicht vertrauenswürdigen Quellen herunterlädt. Ja, dazu müsste man sich mitDEBIAN/postinst
(oderpreinst
) beschäftigen und einwget
(oder, in Ihrem Fall,pip install
), und das ist der Ansatz von Flash, Oracle Java, Steam und anderen. Das ist jedoch proprietäre, geschlossene Quellensoftware, sodass ihre Sicherheit sowieso keine ist.Lösung Nr. 1.5:
Sie haben es nicht erwähnt, aber man konnte die Abhängigkeiten nur integrieren Build - Zeit , dh in der Quelle - Paket (die
.orig.tar.gz
,.debian.tar.gz
,.dsc
Trias), indem sie von PyPI Download , wenn die „binäre“ Paket (das Erstellen.deb
). Die Anweisungen für diepip install
gehen indebian/rules
(beachten Sie die Kleinbuchstabendebian
im Gegensatz zum Binärpaket) und werden ausgeführt, wenn Siedebuild
oder ausgebendpkg-buildpackage
.Dies ist ein Mittelweg zwischen # 1 und # 3. Dies mindert (aber nicht löst!) Einige der Probleme von Nummer 3: Zumindest können Sie das Endprodukt überprüfen und
.deb
benötigen zum Zeitpunkt der Installation keinen Internetzugang. Alle Risiken und Belastungen gehen vom Endverbraucher auf den Paketbetreuer über. Es hat jedoch die gleichen Probleme wie Nummer 1, da es den größten Teil der Verpackungssysteminfrastruktur umgeht. Der Umgang mit Abhängigkeiten (Versionen, Updates, Anforderungen, Konflikten) ist schließlich der Grund, warumdpkg
/apt
wurde in erster Linie erstellt! :)Lösung 2:
Der einzig wahre richtige Weg ™ . Sie erstellen Debian-Pakete für Ihre Abhängigkeiten, listen sie als Anforderungen in Ihrem Paket auf und versenden alle
.debs
oder Quellpakete.Von dort haben Sie eine Reihe von Optionen:
Senden Sie die Quellpakete, sowohl Ihre Software als auch deren Abhängigkeiten, zur Einbindung in Debian. Wenn sie akzeptiert werden, stehen sie automatisch allen Debian-Benutzern zur Verfügung, einschließlich aller Derivate wie Ubuntu.
Laden Sie die Quellpakete auf Launchpad hoch und erstellen Sie so eine PPA , die jeder Ubuntu-Benutzer (und seine Derivate wie Linux Mint) problemlos hinzufügen und installieren kann
Hosten Sie Ihr eigenes Debian-Repository auf Ihrer Website, das Benutzer von jedem Debian-basierten System hinzufügen
/etc/apt/sources.list.d
und dieapt
Infrastruktur zum Herunterladen, Installieren und Aktualisieren verwenden können (wie oben beschrieben!).Hosten Sie die
.deb
Dateien für den direkten Download und die Installation. Keineapt
oder automatische Updates erforderlich.Was , wie Ihre PyPI Abhängigkeiten (! Und Ihre Python Software auch) zu verpacken, gibt es eine Reihe von Tools und Referenzen, die den Prozess einfach zu machen:
stdeb , wie du schon sagtest . Oldie und Goodie.
Pybuild , ein neues, erstaunliches Tool von Debian, das ersetzt
stdeb
.Und viele nützliche Hinweise:
Style Guide für das Packen von Python-Bibliotheken
Debian-Python-Richtlinie
Brauche Hilfe? Schauen Sie sich diese an:
Debian-Mentoren-FAQ
Python-Verpackungsteam
quelle
Ich denke, Sie müssen nur den entsprechenden Befehlszeilencode zum postinst-Skript im .deb-Paket hinzufügen. In dieser Antwort finden Sie weitere Details im offiziellen Debian-Handbuch .
quelle
Es ist
pypi2deb
notwendig, ein Paket von pypi zu bekommen und es in ein Deb-Paket zu verwandeln.quelle
Dies ist nicht der Fall, es ist wie bei cpan in Perl. Wenn Sie Repositorys haben, können Sie mit apt-get installieren. Wenn Sie nicht mit pip installieren, sollte der Unterschied darin bestehen, dass pip in / usr / local installiert wird.
Um mit pip zu installieren, können Sie Folgendes tun:
beispielsweise:
quelle