Poetry-Tutorial

Python-Projekte besser managen

21.08.2023
Von 
Serdar Yegulalp schreibt für unsere US-Schwesterpublikation Infoworld.
Poetry erleichtert Programmierern den Alltag und bietet einen eleganten All-in-One-Ansatz, um Python-Projekte zu managen.
Poetry bringt Ordnung ins Python-Projektchaos.
Poetry bringt Ordnung ins Python-Projektchaos.
Foto: Andrewshots - shutterstock.com

"Es sollte einen - und vorzugsweise nur einen einzigen - offensichtlichen Weg geben, etwas zu tun" formulierte Python-Guru Tim Peters im Rahmen von "The Zen of Python". Leider wird die Programmiersprache diesem Ideal nicht immer gerecht - zum Beispiel, wenn es darum geht, Projekte zu managen. Das war lange eine Angelegenheit, die eine Vielzahl von Tools und Methoden erforderte. Glücklicherweise schaffen an dieser Stelle inzwischen einige Tools Abhilfe - zum Beispiel Poetry.

Das Tool injiziert Python die Art von Dev-Projektmanagement-Features, die Go und Rust schon lange vorweisen können - etwa deterministische Abhängigkeiten mit spezifischen Package-Versionen. Das ermöglicht es, Projekte an verschiedenen Orten konsistent aufzuziehen. Zudem vereinfacht Poetry es auch, Projekte und Bibliotheken zu erstellen, zu paketieren und auf PyPI zu veröffentlichen. Damit stellt Poetry eine All-in-One-Lösung dar - im Gegensatz zu Tools wie etwa Pipenv, das sich auf Package- und Umgebungs-Management beschränkt.

In diesem Artikel lesen Sie, wie Sie Poetry für Python-Development-Projekte nutzen, wie Sie es installieren und konfigurieren - und dabei die Fallstricke vermeiden, die mit diesem Entwicklungs-Tool einhergehen.

Poetry in Python einrichten

Poetry unterscheidet sich grundlegend von anderen Python-Tools für Dependency- und Projektmanagement. Das fängt schon bei der Einrichtung an: Statt auf pip setzt Poetry auf einen eigenen Installer. Dieser fügt die App dem Verzeichnis Ihres Benutzerprofil hinzu, damit sie jeder aktuellen und künftigen Python-Installation auf Ihrem System zur Verfügung steht.

Es ist zwar möglich, Poetry auch über pip install poetry einer spezifischen Python-Installation hinzuzufügen, allerdings ist das aus zweierlei Gründen nicht zu empfehlen:

  1. könnte es zu Konflikten mit anderen Systemdateien kommen und

  2. erschwert das die konsistente Verwendung von Poetry mit verschiedenen Python-Versionen und verschiedenen virtuellen Umgebungen.

Poetry-gemanagte Python-Projekte erstellen

Sobald Sie Poetry installiert haben, können Sie mit folgendem Befehl ein neues, über Poetry gemanagtes Projektverzeichnis erstellen:

poetry new <project_name>

Dieser Befehl erstellt ein Unterverzeichnis <project_name> und befüllt es mit einem Project Scaffold (Projektgerüst). Das enthält im Fall von Poetry folgende Komponenten:

  • pyproject.toml ist das Definition File für das Projekt. Poetry verwaltet diese Definition für Sie.

  • README.rst stellt eine leere README-Datei im ReStructuredText-Format dar - das Dateiformat, das für die Python-Dokumentation verwendet wird.

  • tests ist ein Unterverzeichnis mit einem Scaffolding für Unit-Tests.

Python-Umgebungen mit Poetry managen

Eine virtuelle Python-Umgebung ist wahrscheinlich das Erste, was Sie bei einem neuen Poetry-Projekt einrichten wollen. Wenn es darum geht, Virtual Environments zu managen, weicht das Tool ebenfalls von der Norm ab: Anstatt virtuelle Umgebungen im Projektverzeichnis abzulegen, werden diese bei Poetry in einem zentralen Cache-Verzeichnis abgelegt, das je nach Betriebssystem variiert:

  • Unix: ~/.cache/pypoetry/virtualenvs

  • MacOS: ~/Library/Caches/pypoetry/virtualenvs

  • Windows: C:\Users\<username>\AppData\Local\pypoetry\Cache\virtualenvs oder %LOCALAPPDATA%\pypoetry\Cache\virtualenvs

Der Vorteil dieses Ansatzes liegt darin, virtuelle Umgebungen projektübergreifend nutzen zu können, wann immer das sinnvoll ist. Das bringt jedoch eine Umstellung der Arbeitsgewohnheiten mit sich.

Um eine virtuelle Umgebung in Poetry einzurichten, rufen Sie das Verzeichnis des Projekts auf und nutzen folgenden Befehl:

poetry env use python (oder poetry env use py unter Windows)

Poetry erstellt nun eine neue Virtual Environment, speichert diese im Cache-Verzeichnis und generiert einen zufälligen Namen. Für zusätzlichen Komfort installiert Poetry auch alle Abhängigkeiten, die in der pyproject.toml-Datei aufgeführt sind. Das ist äußerst praktisch, wenn Sie ein Poetry-Projekt von einem anderen Ort kopieren und auf Ihrem System einrichten wollen. Wenn Sie oben genannten Befehl in einem Projektverzeichnis ausführen, dem Poetry bereits eine virtuelle Umgebung zugewiesen hat, wird diese im Kontext der CLI-Sitzung aktiviert. Um im nächsten Schritt Ihre Poetry-gemanagten, virtuellen Umgebungen mit Ihrer IDE zu verwenden, müssen Sie im Regelfall nicht mehr viel tun: Diverse Python-Entwicklungsumgebungen erkennen inzwischen automatisch, wenn eine Poetry-Umgebung vorliegt - Visual Studio Code beispielsweise.

Wenn Sie keinen Wert darauflegen, dass Poetry Ihre virtuellen Umgebungen verwaltet (was einer der größten Vorzüge des Tool ist), können Sie das mit folgendem Befehl deaktivieren:

poetry config virtualenvs.create false

Poetry, Python und Dependencies

Sie können einem Poetry-Projekt auf zweierlei Arten Abhängigkeiten hinzufügen:

  • als General Dependency (allgemeine Abhängigkeit) oder

  • als Teil einer Dependency Group (Abhängigkeitsgruppe).

Mit Dependency Groups erstellen Sie - wie die Nomenklatur bereits nahelegt - Gruppen von Abhängigkeiten innerhalb eines Projekts. Diese lassen sich für jeweils unterschiedliche Zwecke verwenden: Beispielsweise können Sie eine Dependency Group für Entwickler erstellen, die spezielle Tools wie black, mypy oder docutils verwenden.

Um einem Projekt allgemein Abhängigkeiten hinzuzufügen, verwenden Sie folgenden Befehl:

poetry add <dependency_name>

Um einer bestimmten Gruppe Abhängigkeiten hinzuzufügen, nutzen Sie:

poetry add --group <group_name> <dependency_name>

poetry add funktioniert ähnlich wie pip install - Sie können entweder einen Package Name oder einen Git-Pfad (zum Beispiel git+https://github.com/developer/project.git#branchname) angeben. Darüber hinaus können Sie Poetry auch für private Repositories konfigurieren.

Sobald die Abhängigkeiten aufgelöst und installiert sind, erstellt Poetry im Projektverzeichnis eine Datei namens poetry.lock. Diese stellt ein "Manifest" aller heruntergeladenen Abhängigkeiten dar und sollte zusammen mit dem Rest des Projekts abgelegt werden. So erhält auch jeder, der eine Kopie des Projekts aus der Versionskontrolle zieht, die gleichen Versionen aller benötigten Packages.

Poetry-Umgebungen entfernen

Wenn Sie ein Poetry-Projektverzeichnis löschen, werden zentral gemanagte, virtuelle Umgebungen dabei standardmäßig nicht entfernt - diese müssen manuell gelöscht werden. Um das zu bewerkstelligen, rufen Sie das Stammverzeichnis des betreffenden Poetry-Projekts auf und geben folgenden Befehl ein:

poetry env remove python (oder poetry env remove py unter Windows)

Falls Sie die Umgebung in Ihrem Projektverzeichnis platziert haben, können Sie diese auch einfach manuell löschen - aber auch dies macht eine der besten Funktionen von Poetry zunichte.

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