Dependency-Management-Tools für Python
Hayley Denbraver
15. April 2020
0 Min. LesezeitDas Verwalten von Abhängigkeiten ist wichtig für den Zustand Ihres Python-Projekts. Ein Projekt mit gut verwalteten Abhängigkeiten profitiert von besserer Vorhersagbarkeit, Nachhaltigkeit und Sicherheit. Gut verwaltete Abhängigkeiten sorgen für ein vorhersehbares Verhalten in lokalen Entwicklungs- und Produktionsumgebungen. Wenn Ihre Abhängigkeiten gut verwaltet sind, geraten Sie weder in Schwierigkeiten mit dem Ende des langfristigen Supports noch müssen Sie mit untereinander inkompatiblen Abhängigkeiten rechnen. Zum richtigen Dependency-Management gehört außerdem, alle direkt oder indirekt verwendeten Pakete zu kennen, Sicherheitsprobleme zu verstehen und geeignete Maßnahmen zu ihrer Behebung zu ergreifen.
Dependency-Management lässt sich nicht immer einfach umsetzen. Für Ihr Python-Projekt gibt es verschiedene Möglichkeiten, dieses Problem anzugehen. Im Folgenden stellen wir einige davon vor – mit dem Ziel, das Dependency-Management so einfach wie möglich zu gestalten.
Welche Möglichkeiten gibt es für das Dependency-Management in Python?
Venv
Das venv-Modul gehört seit Version 3.3 zur Python-Standardbibliothek. Wenn auf Ihrem Rechner Python 3.3 oder höher installiert ist, steht Ihnen venv zur Verfügung. Mit venv lassen sich virtuelle Umgebungen erstellen, die eine eigene Python-Installation enthalten – entsprechend der Version, mit der die Umgebung erstellt wurde. Wie Sie mit venv eine Umgebung erstellen und aktivieren sowie Pakete darin installieren, erfahren Sie in der offiziellen Python-Dokumentation. Venv ist einfach zu verwenden, schlank und für viele Python-Projekte eine hervorragende Wahl.
Virtualenv
Virtualenv ist eine Bibliothek eines Drittanbieters, mit der sich virtuelle Umgebungen erstellen lassen. Sie kann auch mit älteren Python-Versionen verwendet werden. Viele Entwickler sind zu `venv` gewechselt, nachdem es mit Python 3.3 Teil der Standardbibliothek wurde. Der Support für Python 2.7 endete Anfang 2020, und wir empfehlen, diese Version nicht mehr zu verwenden. Wenn Sie jedoch ein Projekt mit Python 2.7 haben, können Sie mit virtualenv virtuelle Umgebungen erstellen. Virtualenv bietet außerdem Funktionen, die in venv nicht verfügbar sind. Deshalb verwenden manche Pythonistas virtualenv auch für ihre Python-3-Projekte. Dazu gehören beispielsweise die Aktualisierung über pip, Leistungsverbesserungen und eine umfangreiche API. Zum Zeitpunkt der Erstellung dieses Beitrags wird virtualenv aktiv gepflegt; die letzte Version erschien im April 2020. Auch wenn viele das Projekt mit Python 2.7 verbinden, ist es weiterhin lebendig und mit Python 3 kompatibel.
Pipenv
Pipenv ist eine Option für das Dependency-Management mit einigen zusätzlichen Funktionen. Der offensichtlichste Unterschied: Es verwendet eine Lock-Datei, um deterministische Builds sicherzustellen. Darüber hinaus bietet es erweiterte Funktionen, etwa die Angabe eines Paketindex, das Erkennen von Sicherheitslücken, die einfache Verwaltung von Umgebungsvariablen und eine gute Kompatibilität mit Windows. Zum Zeitpunkt der Erstellung dieses Beitrags erschien die letzte Version von Pipenv Ende 2018. Da Pipenv seit anderthalb Jahren nicht aktualisiert wurde, sind manche Pythonistas möglicherweise zögerlich, es einzusetzen. Ich finde das Tool einfach zu verwenden, würde aber vielleicht zögern, es für ein Projekt zu nutzen, an dem ich langfristig arbeiten möchte.
Poetry
Poetry ist ein Tool für Dependency-Management und Paketierung in Python. Wie Pipenv nutzt Poetry ein Lock-Dateisystem, um deterministische Builds zu ermöglichen. Poetry stellt immer sicher, dass Sie eine virtuelle Umgebung verwenden, sodass globale Installationen nicht beeinträchtigt werden. Sie können Abhängigkeiten über die Kommandozeile deklarieren oder Ihre pyproject.toml-Datei bearbeiten. Mit Poetry lassen sich Versionsbeschränkungen einfach festlegen – praktisch, um Versionen mit bekannten Sicherheitslücken zu vermeiden. Zum Zeitpunkt der Erstellung dieses Beitrags wird Poetry aktiv gepflegt. Die letzte Version erschien im Februar 2020, eine Vorabversion im März 2020.
Pip-tools
Pip-tools ist eine Open-Source-Toolsammlung, mit der Sie Ihre pip-basierten Pakete aktuell halten können – auch wenn ihre Versionen festgeschrieben sind. (Das Festschreiben von Versionen trägt zu deterministischen Builds bei.) Pip-tools umfasst zwei separate Befehle: `pip-compile` und `pip-sync`. Der Befehl `pip-compile` erstellt Ihre `requirements.txt`-Datei, während `pip-sync` Pakete zuverlässig entsprechend dieser Datei installiert. Zum Zeitpunkt der Erstellung dieses Beitrags wird Pip-tools aktiv gepflegt; die letzte Version erschien im Februar 2020.
Hatch
Hatch ist ein Open-Source-Produktivitätstool, das nicht nur die Verwaltung Ihrer Abhängigkeiten erleichtert, sondern auch Funktionen für Tests und mehr bietet. Außerdem enthält es Tools für die Interaktion mit PyPI und eignet sich daher hervorragend für Maintainer von Open-Source-Projekten. Zum Zeitpunkt der Erstellung dieses Beitrags scheint Hatch aktiv gepflegt zu werden. Die letzte Version erschien im Oktober 2019. Einige andere Optionen auf dieser Liste wurden in jüngerer Zeit aktualisiert, doch hinsichtlich der Wartung ist Hatch vermutlich eine sichere Wahl.
Wie erkenne ich Sicherheitslücken in den Projekten, die ich verwende?
Die Tools im vorherigen Abschnitt helfen Ihnen dabei, Ihre Abhängigkeiten zu installieren, aktuell zu halten und von anderen Versionen zu isolieren, die Sie möglicherweise für andere Projekte installiert haben. So können Sie über verschiedene Umgebungen hinweg vorhersehbare, stabile Builds erstellen.
Bei der Auswahl Ihrer Abhängigkeiten sind die oben genannten Aspekte sehr wichtig, aber nicht die einzigen, die Sie berücksichtigen sollten. Sie sollten auch wissen, ob Ihre Abhängigkeiten Sicherheitslücken aufweisen, und diese beheben. Pipenv bietet einige Funktionen für den Umgang mit bekannten Sicherheitslücken. Unabhängig davon, für welches Dependency-Management-Tool Sie sich entscheiden: Snyk hilft Ihnen dabei, Sicherheitslücken in den Abhängigkeiten Ihres Python-Projekts zu finden und zu beheben. Über unser Dashboard können Sie sogar direkt einen Fix-PR erstellen. Und das Beste: Snyk ist für Open-Source- und öffentliche Projekte kostenlos. Unser kostenloser Tarif umfasst 200 Scans pro Monat für private Repositories. Open Source zu nutzen und dabei sicher zu bleiben, war noch nie so einfach.
Starten Sie mit Capture-the-Flag
Erfahren Sie in unserem virtuellen On-Demand-Workshop für Einsteiger, wie Sie Capture-the-Flag-Challenges lösen.
