Pipenv-Tutorial

So bereinigen Sie Python-Projektchaos

07.12.2023
Von 
Serdar Yegulalp schreibt für unsere US-Schwesterpublikation Infoworld.
Pipenv ermöglicht Ihnen, schnell und einfach die virtuellen Umgebungen und Packages Ihrer Python-Projekte gemeinsam zu managen.
Pipenv macht Schluss mit Python-Überreizung.
Pipenv macht Schluss mit Python-Überreizung.
Foto: Origami Sayko - shutterstock.com

Dank des Package-Ökosystems von Python sind Millionen von Entwicklungsprojekten nur einen pip install-Befehl entfernt. Virtuelle Umgebungen ermöglichen, Projekte und ihre Packages voneinander getrennt zu halten. Allerdings kann es sich als höchst unpraktisch erweisen, mit einzelnen Umgebungen und Packages jonglieren zu müssen.

Die Lösung, um Python-Umgebungen und -Packages gemeinsam zu managen, heißt Pipenv. Das Management-Tool stellt sicher, dass jedes Ihrer Projekte die jeweils richtige Version des Packages verwendet, das es benötigt. Darüber hinaus listet das Tool die Abhängigkeiten innerhalb Ihres Projekts auf, was wiederum anderen Entwicklern ermöglicht, ein identisches Projekt aufzusetzen.

Wie Pipenv funktioniert

Wenn Sie ein "normales" Python-Projekt erstellen und eine virtuelle Umgebung für dessen Packages verwenden wollen, müssen Sie diese normalerweise manuell erstellen (mit dem Befehl pv -m venv), Abhängigkeiten installieren und manuell tracken.

Pipenv ermöglicht Ihnen, diese Tasks zu "semi-automatisieren": Es erstellt und managt die virtuelle Umgebung für Ihr Projekt, wenn Sie Packages über die Kommandozeilenschnittstelle von Pipenv installieren. Abhängigkeiten werden darüber hinaus getrackt und gesperrt - wobei sich Development- und Runtime-Abhängigkeiten separat managen lassen. Sie können auch über existierende requirements.txt-Dateien migrieren, um nicht von Grund auf neu beginnen zu müssen.

Im Gegensatz zu anderen Python-Projektmanagement-Tools (wie beispielsweise Poetry) managt Pipenv allerdings nicht das "Gerüst" Ihres Projekts. Soll heißen: Die interne Struktur des Projektverzeichnisses mit Mock Tests, Documentation Stubs und so weiter bleibt bei Pipenv außen vor. Der Fokus liegt bei diesem Tool auf Package- und Environment-Management. Als All-in-One-Lösung eignet sich Pipenv folglich nicht.

Pipenv-Projekt neu aufsetzen

Pipenv wird auf die gleiche Weise installiert wie die meisten anderen Python-Packages:

  • pip install --user pipenv

Die Option --user ist zu empfehlen, um zu verhindern, dass Pipenv mit anderen systemweiten Packages in Konflikt gerät. Sie sollten zudem sicherstellen, dass Pipenv-Befehle richtig geroutet werden, indem Sie den Systempfad um den zur User Base Binary ergänzen. Falls Sie Pipenv zum festen Bestandteil Ihrer Workflows machen möchten ist darüber hinaus zu empfehlen, die zugrundeliegende Python-Installation so minimal wie möglich zu halten (was im Grunde für alle Installationen gilt, die virtuelle Umgebungen verwenden).

Um ein komplett neues Projekt mit Pipenv aufzusetzen, legen Sie einfach ein Verzeichnis an und bestücken dieses mit den Dateien, die Sie auch sonst für ein Projekt benötigen. Sie können natürlich auch mit einem leeren Verzeichnis beginnen und Ihr Projekt nach und nach befüllen. Packages für ein Projekt zu installieren, unterscheidet sich nicht wesentlich von der Vorgehensweise bei Pip - die Syntax ist im Grunde identisch. Öffnen Sie eine Konsole in Ihrem Projektverzeichnis und installieren Sie ein Package für das Projekt mit dem Befehl:

  • pipenv install <package_name>

Mit dem Flag -d definieren Sie, dass das Package für Entwicklungszwecke gedacht ist. Um eine bestimmte Version eines Packages zu spezifizieren, können Sie auf pip zurückgreifen (zum Beispiel black==13.0b1).

Packages installieren mit Pipenv

Wenn Sie ein Package mit Pipenv installieren, laufen zwei Dinge ab:

  1. Zuerst überprüft Pipenv, ob für dieses Projektverzeichnis bereits eine virtuelle Umgebung erstellt wurde. Falls ja, installiert Pipenv das Package in die bestehende virtuelle Umgebung. Falls nicht, erstellt Pipenv eine virtuelle Umgebung, die dieselbe Python-Edition verwendet. Diese wird nicht im Projektverzeichnis selbst angelegt, sondern in einem von Pipenv verwalteten Verzeichnis in Ihrem Benutzerprofil.

  2. Anschließend installiert Pipenv die angeforderten Packages in der virtuellen Umgebung. Sobald die Installation abgeschlossen ist, generiert Pipenv ein entsprechendes Reporting (inklusive des Pfads zur virtuellen Umgebung, falls diese erstellt wurde).

Im Allgemeinen müssen Sie letztgenannten Pfad zur virtuellen Umgebung nicht kennen. Um die Umgebung zu aktivieren, navigieren Sie einfach zu Ihrem Projektverzeichnis und verwenden

  • entweder pipenv shell, um eine neue Shell-Sitzung zu starten

  • oder pipenv run <command>, um einen Befehl direkt auszuführen.

Pipenv und Lockfiles

Wenn Sie nach der Package-Installation mit Pipenv einen Blick in das Projektverzeichnis werfen, finden Sie dort zwei Dateien:

  • Pipfile und

  • Pipfile.lock.

Beide werden von Pipenv automatisch generiert und sollten nicht direkt bearbeitet werden, da sie den Zustand der Packages im Projekt beschreiben.

Pipfile ist die simplere der beiden Dateien: Sie listet nur die Packages auf, die für das Projekt benötigt werden, wo diese installiert sind (die Vorgabe ist PyPI) und welche Python-Version benötigt wird, um alles auszuführen. Mit anderen Worten: Pipfile ist vergleichbar mit requirements.txt.

Pipfile.lock ist etwas komplexer: Es listet jedes Package zusammen mit den Versionsangaben und SHA-256-Hashes auf, die von diesem generiert wurden. Letztere werden genutzt, um sicherzustellen, dass die installierten Packages exakt mit den Angaben übereinstimmen - nicht nur was die Versionsnummer, sondern auch was den Inhalt angeht.

Sollten Sie Pipenv für das Package Management einsetzen, empfiehlt es sich, die Pipfile- und Pipfile.lock-Dateien zum Versionskontroll-Repository für das Projekt hinzuzufügen. So wird jede Änderung an den Packages nachverfolgt und entsprechend versioniert.

Pipenv-Projekte nutzen

Wenn Sie ein Quellcode-Repository für ein Projekt herunterladen, das Pipenv verwendet, müssen Sie lediglich seinen Inhalt in ein Verzeichnis entpacken und den Befehl pipenv install ausführen (keine Package-Namen erforderlich). Pipenv liest die Pipfile- und Pipfile.lock-Dateien für das Projekt ein, erstellt die virtuelle Umgebung und installiert alle Abhängigkeiten wie benötigt.

Wenn Sie Pipenv verwenden möchten, um ein Projekt zu verwalten, das derzeit eine requirements.txt-Datei verwendet, navigieren Sie einfach zum Verzeichnis des Projekts und führen Sie pipenv install aus. Pipenv erkennt die requirements.txt (oder Sie können das Flag -r verwenden, um darauf zu verweisen) und migriert alle Anforderungen in ein Pipfile.

Dieser Beitrag basiert auf einem Artikel unserer US-Schwesterpublikation Infoworld.