© MAbdullah/Shutterstock.com
Dokumentation, Testing, Watchfile und Co. im Überblick

Python-Software als Debian-Paket


Auch wenn Linux-Distributionen wie Debian auf dem Desktop für Endanwender weiterhin nur eine untergeordnete Rolle spielen, so bestimmen sie in der professionellen IT wie bei Servern, eingebetteten Systemen, bei DevOps und Cloud-Computing schon längst das Geschehen. Entwickler, die ihre Software dort integrieren und vertreiben möchten, sind mit der Schwierigkeit konfrontiert, sich dafür in recht komplizierte Systeme einarbeiten zu müssen. Dieser Artikel zeigt, wie aus Python-Software konforme Debian-Pakete erstellt werden.

„Wozu überhaupt eigene Python-Pakete für Linux-Distributionen? Es gibt doch Pip!“ – so hört man es manchmal. Und in der Tat lässt sich Python-Software auf unterschiedlichen Betriebssystemen meist unkompliziert aus dem offiziellen Python Package Index (PyPI), in dem Applikationen und Bibliotheken gemäß der Empfehlung PEP 438 [1] gesammelt verfügbar sind, einspielen. Allerdings gibt es eine ganze Reihe guter Gründe für eigene Python-Pakete in Debian [2] und den anderen Linux-Distributionen, die sich über die Jahre mit Hunderten davon zu großen, vollständig integrierten Python-Umgebungen entwickelt haben.

Für IT-Administratoren etwa hat das den Vorteil, dass über den eingebauten Paketmanager auf einen Blick ersichtlich ist, welche Software auf einem System installiert ist, ohne den Python-Paketmanager pip zusammen mit denjenigen der anderen Programmiersprachen (RubyGems, Cabal für Haskell usw.) einzeln abfragen (und beherrschen) zu müssen. In der Praxis funktioniert das Installieren aus dem PyPI auch nicht immer reibungslos, denn wenn zum Beispiel Maschinencode-Extensions erzeugt werden müssen, wird es schnell hakelig.

Auf einem Linux-System lassen sich komplexe Toolchains wie aus den Bereichen Deep Learning oder naturwissenschaftliche Python-Software unkompliziert mit einem einzigen Befehl auf den Rechner bekommen (und auch wieder herunter) – und das auch komplett mit allen benötigten Abhängigkeiten über Python hinaus. Das ist sehr komfortabel für Endbenutzer, spielt aber auch eine Rolle, wenn spezielle Instanzen mit bestimmter Python-Software in der Cloud benötigt werden und mit der eingebauten Paketverwaltung unmittelbar und zuverlässig per Fernsteuerung aufgesetzt werden können, ohne dafür aufwändig mit Shell-Skripten hantieren zu müssen.

Linux-Distros sind beliebt bei Programmierern, allerdings benutzen Python-Coder meist lieber virtualisierte Entwicklungsumgebungen, als mit den Debian-Paketen von Bibliotheken zu arbeiten, weil diese in Stable Releases gar nicht oder in Rolling Releases wie Debian Testing laufend aktualisiert beziehungsweise ausgetauscht werden. Die dafür benötigte Software Virtualenv und viele andere Werkzeuge für die Python-Entwicklung sind aber wiederum als Pakete im System verfügbar. Außerdem lassen sich die beiden Vertriebssysteme für Python-Software auch kombinieren.

Debian-Pakete

In Python findet die Installation von Software heutzutage normalerweise mit Distutils bzw. Setuptools [3] statt. Die Bauwerkzeuge von Debian legen sich als zusätzliche Schicht darüber, um daraus Binärpakete (die so heißen, auch wenn sie keinen Binärcode enthalten) zu bekommen. Die Python-Richtlinie [4] gibt vor, dass von Bibliotheken grundsätzlich Pakete jeweils für die Python-2.x- und die -3.x-Laufzeitumgebungen erzeugt werden sollen, die in Debian nebeneinander verfügbar sind.

Zu den bewährten Verfahren in den Python-Gruppen DPMT (Debian Python Modules Team, Abb. 1) und PAPT (Python Applications Packaging Team) gehört es außerdem, die Testsuiten von Python-Software während des Paketbaus durchlaufen zu lassen und die betreuten Pakete in die Debian-eigene kontinuierliche Integration (Debian CI) einzufügen. Die Dokumentation von Python-Paketen wird gemeinhin in ein eigenes, separates Paket gebaut und ist so bei Bedarf für die Offlinebenutzung verfügbar (Abb. 2), wobei gemäß den strengen Richtlinien von Debian jegliche Anbindungen an Onlinedienste wie Sitetracker vom Paketbetreuer herausgepatcht werden.

Ein großer Mehrwert für die IT-Sicherheit ist die Anpassung von Python-Paketen für den reproduzierbaren Paketbau in Debian [5], für den subtile Non-Determinismen wie Bauzeitstempel oder eingespeicherte Baupfade mit zufälligen Bestandteilen entfernt werden. Und wenn Probleme mit einem Python-Paket in Debian beseitigt worden sind, zum Beispiel, wenn es beim Bau von Maschinencode-Extensions in einem der unterstützten Ports gehakt hat, dann werden Patches auch an die Entwickler zurückgegeben. Dort ist man oftmals dankbar dafür, weil meist nicht für eine solche Vielzahl von Architekturen entwickelt wird beziehungsweise entwickelt werden kann.

stender_python_1.tif_fmt1.jpgAbb. 1: Die vom DPMT betreuten Python-Pakete
stender_python_2.tif_fmt1.jpgAbb. 2: Die Sphinx-Dokumentation aus dem Paket „deap-doc“ in „/usr/share/doc“

Pybuild

Ein auf breiter Front für Debian-Pakete eingesetztes Bauwerkzeug ist debhelper [6], das aus in Perl geschriebenen Modulen besteht, die die beim Paketbau benötigten Einzeloperationen wie das Kopieren von Dateien in die richtigen Verzeichnisse und die Erzeugung der Binärpakete ausführen. Der debhelper Sequencer dh $@ für debian/rules bietet hierfür eine bequeme Automatik, mit der die einzelnen Module in der richtigen Reihenfolge und je nach Bedarf während des Paketbaus ausgeführt werden.

Für debhelper gibt es eine ganze Reihe von Add-ons für verschiedene Zwecke, zu denen auch Pybuild als das...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang