GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So packen Sie Python-Anwendungen für Linux

Eine Möglichkeit, Python-Anwendungen auf Debian-basierten Betriebssystemen (wie Debian oder Elementary OS) installierbar zu machen, ist die Verwendung des Tools dh_virtualenv. Es baut eine .deb auf Paket, das eine virtuelle Python-Umgebung um eine Anwendung wickelt und sie bei der Installation bereitstellt.

In diesem Artikel erkläre ich die Verwendung am Beispiel des Erstellens eines Pakets mit dem HTTPie-Tool zum Testen von HTTP-APIs über die Befehlszeile, ohne eine virtuelle Umgebung aktivieren zu müssen.

Paketierung mit dh_virtualenv

Zuerst müssen Sie die Tools installieren, die dh_virtualenv benötigt. Die Dokumentation von dh_virtualenv bietet alle Installationsoptionen. Auf meinem Debian-basierten System habe ich Folgendes eingegeben:

apt-get install dh-virtualenv devscripts 

Obwohl das devscripts-Paket nicht erforderlich ist, vereinfacht es die nachfolgenden Operationen.

Erstellen Sie nun ein Verzeichnis, um die Quellen zu speichern. Da dies ein lokales, inoffizielles Paket von HTTPie ist, habe ich es myhttp genannt . Als Nächstes erstellen wir einige Dateien in myhttp um Metadaten für das Debian-Build-System bereitzustellen.

Erstellen Sie zuerst debian/control Datei:

Quelle:myhttp
Abschnitt:python
Priorität:extra
Maintainer:Jan Doe
Build-Depends:debhelper (>=9), python3.7, dh-virtualenv (>=0.8)
Standards-Version:3.9.5

Paket:myhttp
Architektur:beliebig
Pre-Depends:dpkg (>=1.16.1), python3.7, ${misc:Pre-Depends}
Depends:${misc:Depends}
Description:http client
 Nützlich für Dinge

Worum geht es also bei all diesen Informationen? Wie die Debian-Dokumentation es ausdrückt:

„Zeile 1–7 sind die Steuerinformationen für das Quellpaket. Zeilen 9–13 sind die Steuerinformationen für das Binärpaket.“

Hier ist meine Meinung:

  • der Abschnitt Wert ist für unseren Fall meist bedeutungslos, muss aber vorhanden sein. Es ist sinnvoll, dem geführten UI-Installationsprogramm Informationen bereitzustellen, die für dieses Paket nicht relevant sind.
  • Die zusätzliche Priorität Wert ist die richtige Priorität für Pakete von Drittanbietern wie dieses.
  • Es wird dringend empfohlen, echte Kontaktdaten in den Maintainer einzugeben Feld. Es muss jedoch nicht Ihre persönliche E-Mail-Adresse sein – beispielsweise „Infrastrukturteam “, wenn das Paket vom Team verwaltet wird und Sie Probleme haben möchten an den Mail-Alias ​​des Teams gesendet werden.
  • Die Build-Abhängigkeiten zeigt an, dass Sie debhelper, python und dh-virtualenv benötigen, um das Paket zu bauen:Der Paketerstellungsprozess stellt sicher, dass diese Abhängigkeiten zum Zeitpunkt der Paketerstellung installiert werden.
  • Die Standardversion ist hauptsächlich für den menschlichen Verzehr bestimmt. Es zeigt an, welcher Anleitung Sie folgen. Diese Anleitung basiert auf der offiziellen Dokumentation von dh-virtualenv, die auf der 3.9.5-Anleitung von Debian basiert. Es ist fast immer die beste Wahl, das Binärpaket und das Quellpaket gleich zu benennen.
  • Die Architektur Feld sollte Beliebig sein da eine virtuelle Umgebung einige architekturspezifische Dateien enthalten könnte:Andernfalls wäre das Feld besser als all ausgewählt .
  • Behalten Sie die Pre-Abhängigkeiten list as-is:pre-depends ist eine ziemlich strenge Form von Abhängigkeiten, und es kommt selten vor, dass Sie mehr als das hier vorgeschlagene Minimum benötigen. Die Abhängigkeiten werden normalerweise vom Build-System genau berechnet, daher gibt es keinen Grund, sie manuell anzugeben.
  • Wenn Ihr Paket hauptsächlich für den internen Gebrauch bestimmt ist, dann die Beschreibung kann nur minimale Informationen und einen Link zum Firmen-Wiki angeben; andernfalls könnten weitere Details nützlich sein.

Erstellen Sie dann die Datei debian/compat Datei, die hauptsächlich für historische Zwecke existiert:

$ echo "9" > debian/compat 

Erstellen Sie als Nächstes das Änderungsprotokoll, um Paketbenutzern mitzuteilen, was sich seit der letzten Version geändert hat. Der einfachste Weg ist die Verwendung von dch --create um eine Vorlage zu erstellen und dann die Werte einzugeben.

Ausgefüllt sieht es so aus:

myhttp (2.0.0-1) stabil; urgency=medium

  * Erstveröffentlichung.

 -- Jan Doe  Fr, 27. März 2020 01:09:22 +0000

Jetzt müssen Sie dem Tool sagen, dass es HTTPie installieren soll, aber welche Version?

Erstellen Sie eine requirements.in Datei mit losen Versionen:

httpie 

Im Allgemeinen enthält die lose Anforderungsdatei nur direkte Abhängigkeiten Ihres Projekts und gibt bei Bedarf Mindestversionen an. Es ist nicht immer notwendig, die Mindestversionen anzugeben:Die Tools sind normalerweise darauf ausgerichtet, die Abhängigkeiten in Richtung "neuestmögliche Version" zu verschärfen. In dem Fall, in dem Ihr Debian-Paket einem internen Python-Paket entspricht, ein häufiger Fall in internen Anwendungen, sieht die lose Anforderungsdatei ähnlich aus:nur eine Zeile mit dem Namen des Pakets.

Verwenden Sie dann pip-compile (verfügbar durch Installation des PyPI-Pakets pip-tools ):

$ pip-compile requirements.in > requirements.txt 

Dadurch wird eine strikte Abhängigkeitsdatei namens requirements.txt erstellt :

#
# Diese Datei wird automatisch von pip-compile generiert
# Zum Aktualisieren führen Sie Folgendes aus:
#
#    pip-compile requirements.in
#
certifi==28.11.2019       # über Anfragen
chardet==3.0.4            # über Anfragen
httpie==2.0.0             # über -r requirements.in
idna==2.9                 # über Anfragen
pygments==2.6.1           # über httpie
requests==2.23.0          # über httpie
urllib3==1.25.8           # über Anfragen

Schreiben Sie abschließend ein debian/rules Datei zum Erstellen des Pakets. Da dh_virtualenv die ganze harte Arbeit erledigt, ist die Datei rules einfach:

#!/usr/bin/make -f

%:
        dh $@ --with python-virtualenv --python /usr/bin/python3.7

Achten Sie darauf, den Python-Interpreter anzugeben. Standardmäßig wird der Interpreter in /usr/bin/python verwendet , das ist Python 2, aber Sie sollten eine unterstützte Version von Python verwenden.

Das Schreiben ist beendet; Alles, was übrig bleibt, ist das Paket zu bauen:

$ debuild -b -us -uc 

Weitere Linux-Ressourcen

  • Spickzettel für Linux-Befehle
  • Spickzettel für fortgeschrittene Linux-Befehle
  • Kostenloser Online-Kurs:RHEL Technical Overview
  • Spickzettel für Linux-Netzwerke
  • SELinux-Spickzettel
  • Spickzettel für allgemeine Linux-Befehle
  • Was sind Linux-Container?
  • Unsere neuesten Linux-Artikel

Dadurch wird im übergeordneten Verzeichnis eine Datei mit einem Namen wie myhttp_2.0.0-1_amd64.deb erstellt . Diese Datei kann auf jedem kompatiblen Betriebssystem installiert werden.

Im Allgemeinen ist es am besten, Debian-Pakete, die für eine bestimmte Plattform gedacht sind, wie Debian 10.0, auf derselben Plattform zu erstellen.

Dieses Debian-Paket können Sie in einem Repository ablegen und auf allen relevanten Systemen beispielsweise mit Ansible installieren.

Schlussfolgerung

Das Packen von Anwendungen für Debian-basierte Betriebssysteme ist ein mehrstufiger Prozess. Die Verwendung von dh_virtualenv macht den Prozess unkompliziert.


Linux
  1. So installieren Sie Python unter Linux

  2. So erstellen Sie ein freigegebenes Verzeichnis für alle Benutzer in Linux

  3. So erstellen Sie ein Skript eines Linux-Befehls

  4. So erstellen Sie ein Linux-RPM-Paket

  5. Wie erstelle ich ein Travis CI-Testpaket für Linux, OS X, Windows?

So erstellen Sie Verknüpfungen auf dem Linux-Desktop

So erstellen Sie einen SSH-Alias ​​unter Linux

So erstellen Sie einen Alias ​​unter Linux

So installieren Sie Setuptools für Python unter Linux

Wie erstelle ich ein Paket für ein cPanel-Konto?

So erstellen Sie einen Domänencontroller unter Linux für AD