Python Poetry: Moderne und effiziente Python-Umgebung und Abhängigkeitsverwaltung

Das Ökosystem von Python hat traditionell auf Tools wie pip und virtualenv zur Verwaltung von Abhängigkeiten und Projektumgebungen vertraut. Obwohl uns diese Tools gut gedient haben, führen sie oft zu Abhängigkeitskonflikten, manueller Umgebungsverwaltung und inkonsistenten Projektaufstellungen in Teams.

Python Poetry löst diese Herausforderungen, indem es ein modernes, vereinheitlichtes Abhängigkeits- und Umgebungsverwaltungstool bereitstellt. Es kümmert sich um alles von virtuellen Umgebungen bis hin zur Paketveröffentlichung, und gewährleistet dabei reproduzierbare Builds durch intelligente Abhängigkeitsauflösung.

Dieser Leitfaden zeigt Ihnen, wie Sie Poetry verwenden können, um Ihren Python-Entwicklungsworkflow zu optimieren und übliche Abhängigkeitsprobleme zu vermeiden.

Python Poetry vs. PIP

Poetry und pip haben unterschiedliche Zwecke im Python-Ökosystem. Während pip hauptsächlich ein Paketinstallationsprogramm ist, ist Poetry ein vollständiges Abhängigkeits- und Projektverwaltungstool. Hier sind die Hauptunterschiede:

1. Abhängigkeitsauflösung

  • Pip: Einfache, lineare Abhängigkeitsauflösung, die zu Konflikten führen kann
  • Gedichte: Fortgeschrittener Abhängigkeitslöser, der Konflikte vor der Installation verhindert

2. Verwaltung der virtuellen Umgebung

  • Pip: Erfordert separate Tools (virtualenv, venv) und manuelle Aktivierung
  • Gedichte: Erstellt und verwaltet automatisch virtuelle Umgebungen pro Projekt

3. Projektkonfiguration

  • Pip: Verwendet requirements.txt für Abhängigkeiten, setup.py für Projektdaten
  • Gedicht: Einzelne pyproject.toml-Datei für alle Konfigurationsbedürfnisse

4. Sperrdateien

  • Pip: Keine integrierte Unterstützung für Sperrdateien
  • Poetry: Generiert poetry.lock für reproduzierbare Builds in verschiedenen Umgebungen

5. Paketveröffentlichung

  • Pip: Erfordert zusätzliche Tools (twine, setuptools) für die Veröffentlichung
  • Poetry: Eingebaute Befehle zum Erstellen und Veröffentlichen von Paketen

Wann man Poetry gegenüber pip verwenden sollte

Wählen Sie Poetry, wenn:

  • Sie an Teamprojekten arbeiten, die reproduzierbare Umgebungen benötigen
  • Pakete erstellen, die auf PyPI veröffentlicht werden sollen
  • Komplexe Abhängigkeitsbäume mit potenziellen Konflikten verwalten
  • Automatisiertes Management von virtuellen Umgebungen benötigen
  • Ein einziges Werkzeug für den gesamten Entwicklungsworkflow möchten

Bleiben Sie bei pip, wenn:

  • Arbeiten an einfachen Skripten mit minimalen Abhängigkeiten
  • Python zum ersten Mal lernen
  • Müssen schnell ein einzelnes Paket installieren
  • Arbeiten in Umgebungen, in denen die Installation von Poetry nicht möglich ist
  • Warten von Legacy-Projekten, die bereits mit pip eingerichtet sind

Die Faustregel lautet: Verwenden Sie Poetry für jedes Projekt, das geteilt, bereitgestellt oder langfristig gewartet wird. Verwenden Sie pip für schnelle Experimente oder Lernübungen.

Das gesagt, lassen Sie uns direkt in die Verwendung von Poetry einsteigen.

Einrichten von Python Poetry

Sie werden hauptsächlich mit Poetry als Befehlszeilenwerkzeug (CLI) interagieren, daher macht es Sinn, es systemweit auf Ihrem Computer zu installieren. Dieser Abschnitt behandelt diesen wichtigen ersten Schritt und wie Sie einige Standardkonfigurationen für Poetry basierend auf Ihren Bedürfnissen festlegen können.

Installation von Poetry

Sie können Poetry mithilfe eines offiziellen Installationsskripts installieren, das heruntergeladen und mit einem einzigen Befehl ausgeführt werden kann.

Für macOS, Linux und WSL2:

$ curl -sSL https://install.python-poetry.org | sudo python3 -

Für Windows Powershell (ausgeführt mit Administratorrechten):

$ (Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | py -

Wenn Sie Windows verwenden und Python aus dem Microsoft Store installiert haben (aus irgendeinem seltsamen Grund), ersetzen Sie py durch python im obigen Befehl.

Nach Abschluss des Installationscripts wird eine Nachricht ausgegeben, die Sie auffordert, Poetry zu Ihrem PATH hinzuzufügen, damit der poetry-Befehl überall verfügbar ist.

Fügen Sie für macOS, Linux und WSL2 die folgende Zeile zu Ihrem Shell-Skript wie .bashrc oder .zshrc hinzu:

$ export PATH="/Users/bexgboost/.local/bin:$PATH"

Für Windows können Sie den Ausgabeanweisungen folgen.

Überprüfen Sie anschließend Ihre Installation, indem Sie poetry --version ausführen.

Configurieren von Poetry

Der Großteil der Konfiguration von Poetry bezieht sich darauf, wie virtuelle Umgebungen erstellt und wie Pakete installiert werden. Sie können eine (fast) vollständige Liste der Poetry-Konfigurationen mit dem folgenden Befehl ausgeben:

$ poetry config --list

Die Ausgabe wird ungefähr wie folgt aussehen:

cache-dir = "/Users/bexgboost/Library/Caches/pypoetry" experimental.system-git-client = false installer.max-workers = null installer.modern-installation = true installer.no-binary = null installer.parallel = true keyring.enabled = true solver.lazy-wheel = true virtualenvs.create = true virtualenvs.in-project = null virtualenvs.options.always-copy = false virtualenvs.options.no-pip = false virtualenvs.options.no-setuptools = false virtualenvs.options.system-site-packages = false virtualenvs.path = "{cache-dir}/virtualenvs" # /Users/bexgboost/Library/Caches/pypoetry/virtualenvs virtualenvs.prefer-active-python = false virtualenvs.prompt = "{project_name}-py{python_version}" warnings.export = true

In der ersten Zeile sehen wir einen Pfad zum Poetry-Cache. Er wird hauptsächlich verwendet, um heruntergeladene Paketverteilungen und virtuelle Umgebungen zu speichern. Alle von Ihnen erstellten virtuellen Umgebungen werden standardmäßig hier gespeichert. Wenn Sie das ändern möchten, können Sie den folgenden Befehl ausführen:

$ poetry config virtualenvs.path path/to/new/virtualenv/dir

Eine weitere wichtige Konfiguration ist die Anzahl der Kerne, die während der Installation verwendet werden. Standardmäßig ist sie auf vier festgelegt, aber wir können sie schneller machen, indem wir alle CPU-Kerne nutzen. Finden Sie zuerst die Anzahl der Kerne Ihres Computers heraus, indem Sie os.cpu_count() im Python-Interpreter ausführen. Setzen Sie dann das Ergebnis:

$ poetry config installer.max-workers = 10

Eine optionale Konfiguration besteht darin, ob virtuelle Umgebungen im Arbeitsverzeichnis oder im Cache erstellt werden sollen. Dies wird über die virtualenvs.in-project-Option gesteuert. Wenn Sie es auf True setzen, wird das .venv -Verzeichnis immer in Ihrem Arbeitsverzeichnis erstellt:

$ poetry config virtualenvs.in-project true

Erstellen eines neuen Projekts mit Poetry

Lassen Sie uns in die wichtigsten Schritte zum Erstellen eines neuen Poetry-Projekts eintauchen und die Kernkonfigurationsdatei verstehen.

Initialisieren eines neuen Poetry-Projekts

Die Verwendung von Poetry beginnt normalerweise mit der Erstellung eines neuen Projekts mit dem poetry new Befehl:

$ poetry new explore-poetry $ cd explore-poetry

Der Befehl erstellt ein explore-poetry Verzeichnis, das bereits mit den folgenden Dateien und Verzeichnissen gefüllt ist:

explore-poetry ├── pyproject.toml ├── README.md ├── explore-poetry │ └── __init__.py └── tests └── __init__.py

Diese Verzeichnisstruktur folgt den Python-Best Practices:

  • pyproject.toml: Die Hauptkonfigurationsdatei, die Metadaten und Abhängigkeiten des Projekts definiert
  • README.md: Dokumentationsdatei, die das Projekt erklärt
  • explore-poetry/: Quellcodeverzeichnis, das den Hauptpaketcode enthält, mit __init__.py um es zu einem Paket zu machen
  • tests/: Verzeichnis für Testdateien, mit __init__.py um es zu einem Paket zu machen (importierbar)

Verständnis von pyproject.toml

Hier erfordert die pyproject.toml Datei besondere Aufmerksamkeit, da sie die einzige nicht leere Datei ist, die von Poetry generiert wird:

[tool.poetry] name = "explore-poetry" version = "0.1.0" description = "" authors = ["BexTuychiev <[email protected]>"] readme = "README.md" [tool.poetry.dependencies] python = "^3.8" [build-system] requires = ["poetry-core"] build-backend = "poetry.core.masonry.api"

Diese Datei orchestriert Ihr Projekt und dessen Abhängigkeiten. Sie verwendet Tom’s Obvious, Minimal Language, das als die Standardkonfigurationssprache für Python-Pakete in PEP 518 festgelegt wurde.

Alle pyproject.toml-Dateien sind in Abschnitte unterteilt, die Tabellen genannt werden und Klammern wie tool.poetry oder build-system verwenden. Poetry verwendet diese Tabellen, um Abhängigkeiten zu verwalten, Projektbauanforderungen zu erfüllen oder andere Aufgaben auszuführen.

Wenn Sie die in den kommenden Abschnitten beschriebenen Poetry-Befehle ausführen, wird die pyproject.toml-Datei automatisch aktualisiert.

Arbeiten mit virtuellen Umgebungen in Poetry

In diesem Abschnitt erfahren Sie alles über das Verwalten virtueller Umgebungen in Poetry, sobald Sie es eingerichtet haben. Sie lernen, warum virtuelle Umgebungen wichtig sind, wie Poetry sie automatisch handhabt, und grundlegende Befehle zu ihrer Manipulation, wie Erstellung, Aktivierung und Wechsel. Sie lernen auch, wie Sie Python-Versionen mit Poetry verwalten.

Erstellen und Aktivieren einer virtuellen Umgebung

Wenn Sie Poetry zum ersten Mal installieren, enthält es keine integrierten Umgebungen, wie durch eine leere Ausgabe bestätigt wird, wenn Sie poetry env list ausführen:

$ poetry env list # keine Ausgabe

Aber sobald Sie Abhängigkeiten hinzufügen (mehr dazu später) mit Poesie hinzufügen Paketname, erstellt es automatisch eine Umgebung im Cache-Verzeichnis für das Projekt. Zum Beispiel, versuchen wir Anfragen als Abhängigkeit hinzuzufügen:

$ poetry add requests

Sie sollten eine Ausgabe erhalten, die ähnlich wie folgt aussieht:

Creating virtualenv explore-poetry--I9GJYUn-py3.8 in /Users/bexgboost/Library/Caches/pypoetry/virtualenvs Using version ^2.32.3 for requests Updating dependencies Resolving dependencies... (2.5s) Package operations: 5 installs, 0 updates, 0 removals - Installing certifi (2024.8.30) - Installing charset-normalizer (3.4.0) - Installing idna (3.10) - Installing urllib3 (2.2.3) - Installing requests (2.32.3) Writing lock file

Die erste Zeile besagt, dass Poetry die Umgebung im Cache erstellt hat. Die nächsten Zeilen informieren darüber, dass die Abhängigkeiten für requests erfolgreich aufgelöst wurden und eine Sperrdatei generiert wurde (dazu später mehr).

Achten Sie auf den Umgebungsnamen: explore-poetry--I9GJYUn-py3.8. Der Name enthält den Projektverzeichnisnamen, gefolgt von einer eindeutigen ID und dann der Python-Version, die von der Umgebung verwendet wird.

Beim nächsten Hinzufügen einer Abhängigkeit verwendet Poetry automatisch diese Umgebung, um Pakete zu installieren:

$ poetry add beautifulsoup4 Using version ^4.12.3 for beautifulsoup4 Updating dependencies Resolving dependencies... (1.1s) Package operations: 2 installs, 0 updates, 0 removals - Installing soupsieve (2.6) - Installing beautifulsoup4 (4.12.3) Writing lock file

Wenn Sie Poetry verwenden, wird in Ihrem Terminal nicht angezeigt, welches Poetry-Virtualisierungsumfeld aktiv ist. Um diese Informationen zu sehen, müssen Sie poetry env list ausführen:

$ poetry env list explore-poetry--I9GJYUn-py3.8 (Activated)

Um mit der aktiven Poetry-Umgebung zu interagieren, können Sie poetry shell ausführen:

$ poetry shell

Der Befehl öffnet eine neue Shell-Sitzung innerhalb der aktuellen, in der Sie Befehle wie python oder pytest ausführen können.

Zum Beispiel, um Python-Skripte auszuführen:

$ poetry shell $ python script.py

Zum Ausführen von Entwicklungs-Frameworks wie Streamlit:

# Innerhalb der Shell $ streamlit run app.py

Danach können Sie die Shell verlassen, indem Sie exit aufrufen.

Alternativ können Sie Befehle in der Poetry-Shell ausführen, ohne sie zu betreten, indem Sie poetry run verwenden:

$ poetry run python script.py $ poetry run streamlit run app.py

Konfigurieren der Python-Version

Wenn Sie poetry add oder poetry install ausführen, verwendet Poetry automatisch die im pyproject.toml angegebene Python-Version. Um eine andere Python-Version anzugeben, können Sie den Befehl env use ausführen:

$ poetry env use python3.11

Beachten Sie, dass Python 3.11 auf Ihrem Rechner systemweit installiert sein muss, damit der Befehl funktioniert.

Überprüfen Sie, ob Poetry die Umgebung mit der neuen Python-Version verwendet:

$ poetry env list explore-poetry--I9GJYUn-py3.11 (Activated) explore-poetry--I9GJYUn-py3.8

Beachten Sie, wie die neue Umgebung automatisch unserem Projekt zugeordnet ist (die IDs sind gleich). Sobald Sie Ihre Python-Version konfiguriert haben, können Sie Umgebungen mit anderen Versionen löschen, um Speicherplatz freizugeben:

$ poetry env remove python3.8

Beim Löschen einer Umgebung müssen Sie nur die Python-Version angeben. Sie können auch alle Umgebungen löschen und von vorne beginnen:

$ poetry env remove --all

Beachten Sie, dass der --all Tag alle Umgebungen entfernt, die mit dem aktuellen Projekt verbunden sind, nicht die Umgebungen anderer Projekte.

Wenn Sie an Teamprojekten arbeiten, ist es oft besser, die virtuelle Umgebung im Projektverzeichnis zu belassen:

$ poetry config virtualenvs.in-project true

Dieser Befehl hat keine Auswirkungen, wenn Sie bereits eine Umgebung für das Projekt im Cache haben. Um eine lokale Umgebung zu erstellen, entfernen Sie zuerst alle vorhandenen aus dem Cache.

Dies erstellt einen .venv Ordner in Ihrem Arbeitsverzeichnis, den Sie zu Ihrer .gitignore Datei hinzufügen sollten.

Abhängigkeiten mit Poetry verwalten

Die Abhängigkeitsverwaltung ist der Bereich, in dem Poetry glänzt. Es bietet umfassende Funktionen zum Spezifizieren, Installieren und Verwalten von Abhängigkeiten, damit Sie niemals in höllische Abhängigkeitskonflikte geraten.

In diesem Abschnitt erfahren Sie, wie Sie Abhängigkeiten hinzufügen und installieren, Abhängigkeitsgruppen erstellen, die Syntax für die Abhängigkeitsspezifikation in pyproject.toml und Lock-Dateien.

Hinzufügen von Abhängigkeiten in Poetry

Bei der Verwendung von Poetry verwenden Sie den poetry add paket-name Befehl, um Pakete von PyPI zu installieren, anstelle von pip install. Dies hat einige Vorteile:

  1. Fügt automatisch das Paket mit der richtigen Versionseinschränkung zu pyproject.toml hinzu
  2. Aktualisiert die Sperrdatei, um reproduzierbare Builds sicherzustellen
  3. Löst Abhängigkeiten auf, um Konflikte zu vermeiden
  4. Installiert das Paket und alle seine Abhängigkeiten in der virtuellen Umgebung

Zum Beispiel fügen wir zuerst Numpy als Abhängigkeit hinzu:

$ poetry add numpy

Sie sollten sofort einen Konflikt bei der Auflösung von Abhängigkeiten erhalten, der besagt, dass die Numpy-Version, die installiert wird, nicht mit Ihrer Python-Version kompatibel ist. Der Grund dafür ist, dass wir beim Wechsel zur Python 3.11-Umgebung die pyproject.toml Datei nicht aktualisiert haben. Derzeit sieht sie so aus:

[tool.poetry.dependencies] python = "^3.8" requests = "^2.32.3" beautifulsoup4 = "^4.12.3"

Das Zirkumflexsymbol ^ wird verwendet, um anzuzeigen, dass unser explore-poetry Projekt mit jeder Python-Version bis Python 4 kompatibel ist, aber der Bereich der Numpy-Versionen unterstützt nur Python-Versionen zwischen 3.8 und 3.12, was ein engerer Bereich ist. Der Konfliktfehler ergibt sich aus dieser Tatsache.

Um den Fehler zu beheben, sollten Sie den Python-Versionenbereich wie folgt aktualisieren:

python = ">=3.8, <3.12"

Sobald Sie diese Änderung vorgenommen haben, poetry add numpy Befehl sollte wie erwartet funktionieren.

Sie haben gerade eine der besten Funktionen von Poetry beobachtet – Konflikte bei den Versionen zu erkennen, bevor Sie Pakete installieren, anstatt Sie später über die Versionsinkompatibilitäten zu informieren, wie es bei pip der Fall ist.

Die Syntax zur Angabe von Abhängigkeitsversionen

Poesie verwendet eine leistungsstarke Syntax, um eine breite Palette von Versionen für die beste Synchronisierung zwischen Abhängigkeiten anzugeben. Hier sind die am häufigsten verwendeten Symbole:

  1. Pflegezeichen (^): Ermöglicht Patch- und Nebenversionen, aber nicht Hauptversionen. Beispiel: ^1.2.3 ermöglicht Updates von 1.2.3 bis 1.9.9, aber nicht 2.0.0.
  2. Tilde (~): Ermöglicht nur Patch-Updates. Beispiel: ~1.2.3 ermöglicht Updates von 1.2.3 bis 1.2.9, aber nicht 1.3.0.
  3. Exakte Version: Gibt die genaue Versionsnummer an. Beispiel: 1.2.3 erlaubt nur Version 1.2.3
  4. Größer als (>): Erlaubt jede Version über der angegebenen. Beispiel: >1.2.3 erlaubt 1.2.4, 1.3.0, 2.0.0 usw.
  5. Kleiner als (<): Ermöglicht jede Version unterhalb der angegebenen. Beispiel: <2.0.0 erlaubt alles unterhalb von 2.0.0.
  6. Größer als oder gleich (>=): Ermöglicht die angegebene Version und höher. Beispiel: >=1.2.3 erlaubt 1.2.3 und jede höhere Version.
  7. Kleiner oder gleich (<=): Erlaubt die angegebene Version und darunter. Beispiel: <=2.0.0 erlaubt 2.0.0 und alle niedrigeren Versionen.
  8. Versionsbereich: Kombiniert Einschränkungen mit Kommata. Beispiel: >=1.2.3,<2.0.0 erlaubt Versionen von 1.2.3 bis 1.9.9
  9. Platzhalter (*): Passt zu jeder Version. Beispiel: 1.2.* passt zu jeder Version, die mit 1.2 beginnt

Natürlich können Sie diese nach Belieben kombinieren.

Abhängigkeitsgruppen in Poetry erstellen

In komplexen Projekten mit vielen beweglichen Komponenten müssen Sie oft mit verschiedenen Kategorien von Abhängigkeiten umgehen.

Zum Beispiel erstellen Sie in einem Machine-Learning-Projekt oft verschiedene Pipelines und Komponenten für die Datenerfassung, Datenbereinigung, Feature-Engineering, Modelltraining, Bereitstellung und Überwachung. Nicht zu vergessen, Sie müssen auch die Dokumentation vervollständigen und Tests durchführen. All diese Schritte haben ihr eigenes Ökosystem von Tools, und das Mischen ihrer Abhängigkeiten bläht Ihr endgültiges Vertriebspaket auf.

Mit Poetry können Sie Abhängigkeitsgruppen mit beliebigen Namen erstellen, sodass Sie sie nur bei Bedarf installieren können. Oder das Beste daran – Benutzer Ihres Pakets können auch wählen, die Teile zu installieren, die sie benötigen.

$ poetry add --group ui streamlit plotly dash $ poetry add --group dev black flake8 isort mypy pylint

Die obigen Befehle erstellen zwei Abhängigkeitsgruppen, ui und dev (falls sie noch nicht existieren), und zwei Untertabellen in pyproject.toml:

[tool.poetry.dependencies] python = "^3.11" requests = "^2.32.3" beautifulsoup4 = "^4.12.3" numpy = "^2.1.3" [tool.poetry.group.ui.dependencies] streamlit = "^1.39.0" plotly = "^5.24.1" dash = "^2.18.2" [tool.poetry.group.dev.dependencies] black = "^24.10.0" flake8 = "^7.1.1" isort = "^5.13.2" mypy = "^1.13.0" pylint = "^3.3.1"

Auch wenn Abhängigkeitsgruppen getrennt sind, werden sie dennoch gegeneinander aufgelöst. Mit anderen Worten, wenn es einedev-Abhängigkeit gibt, die mit einem Paket inui in Konflikt steht, wird Poetry die Installation nicht durchführen.

In einigen Fällen können Sie optionale Abhängigkeitsgruppen erstellen oder bestehende Gruppen optional machen, sodass sie standardmäßig nicht installiert werden, wenn ein Benutzer Ihre Projektumgebung neu erstellt. Um dies zu tun, müssen Sie eine neue Unter-Tabelle in der pyproject.toml-Datei erstellen. Zum Beispiel machen wir die ui-Gruppe unten optional:

[tool.poetry.group.ui] optional = true [tool.poetry.group.ui.dependencies] streamlit = "^1.39.0" plotly = "^5.24.1" dash = "^2.18.2"

Es wird durch Setzen des optionalen Parameters auf true erledigt, bevor die Abhängigkeiten der Gruppe deklariert werden.

Reproduzieren eines Poetry-Projekts mit der poetry.lock-Datei

Wenn jemand Ihr GitHub-Repository mit einem Poetry-Projekt klonen würde, könnte er eine perfekte Kopie der virtuellen Umgebung für Ihr Projekt erstellen, indem er einen einzigen Befehl ausführt: poetry install.

Der install Befehl verwendet die umfassendere poetry.lock Datei. Im Gegensatz zu pyproject.toml enthält die Lock-Datei:

  • Die genauen Versionen der Hauptabhängigkeiten sind in pyproject.toml
  • Die genauen Versionen der Abhängigkeiten der Hauptabhängigkeiten (transitive Abhängigkeiten)

Zum Beispiel, requests hängt von urllib3, certifi, charset-normalizer und idna. Ohne eine Sperrdatei könnten diese Unterabhängigkeiten auf verschiedenen Maschinen zu unterschiedlichen Versionen führen.

Die Sperrdatei stellt sicher, dass alle Mitglieder Ihres Teams dieselben Abhängigkeitsversionen erhalten und das Problem „Bei mir funktioniert es“ verhindert wird.

Der Unterschied zwischen poetry add und poetry install

Wir erklären den Unterschied zwischen add und install Befehlen von Poetry anhand eines Anwendungsbeispiels.

Angenommen, Sie arbeiten an einem Projekt zur Betrugsbekämpfung. Sie fügen Ihre anfänglichen Abhängigkeiten hinzu:

$ poetry add pandas scikit-learn

Dies fügt die Pakete zur Sperre und pyproject.toml Dateien hinzu. Dann klonen Ihre Kollegen das Repo:

$ git clone fraud-detection-repo-link $ cd fraud-detection $ poetry install

Sie führen den install Befehl aus, um alles zu installieren, was in der Sperrdatei aufgeführt ist.

Später müssen Sie ein neues Paket hinzufügen:

$ poetry add xgboost

Ihr Kollege zieht die Änderungen:

$ git pull $ poetry install

Sie führen den install Befehl aus, um das neue Paket zu installieren. Also,

  • Verwenden Sie poetry add wenn Sie neue Abhängigkeiten hinzufügen
  • Verwenden Sie poetry install, wenn Sie ein vorhandenes Projekt einrichten müssen.
  • Kommitieren Sie pyproject.toml und poetry.lock ins Versionskontrollsystem.

Abhängigkeitsgruppen mit dem poetry install Befehl installieren.

Zuvor haben wir gelernt, wie man Abhängigkeiten in Poetry gruppieren kann. Wenn Sie poetry install ausführen, werden standardmäßig alle nicht optionalen Gruppen installiert, was in allen Fällen möglicherweise nicht das ist, was Sie möchten.

Zum Beispiel könnten Sie ein Repository nur klonen, um an der Dokumentation zu arbeiten. Oder Sie möchten am Hauptcode des Repositorys arbeiten, aber nicht an den Dokumentations- und Testaspekten. Der install Befehl ist flexibel genug, um all diese Fälle abzudecken:

Ausschluss bestimmter Gruppen:

$ poetry install --without ui,dev

Installation optionaler Gruppen:

# Installation der optionalen Dokumentationsgruppe $ poetry install --with docs

Nur bestimmte Gruppen installieren:

$ poetry install --only ui

Nur die Laufzeitabhängigkeiten des Projekts installieren (die außerhalb von Gruppen erwähnten Abhängigkeiten, hinzugefügt mit einfachen poetry add Paket Befehlen):

$ poetry install --only main

Abhängigkeiten in Poetry entfernen

Das Löschen einer Abhängigkeit ist einfach mit dem remove Befehl:

$ poetry remove requests

Dies entfernt requests aus den Hauptprojekt-Abhängigkeiten. Um ein Paket aus einer Gruppenabhängigkeit zu entfernen, können Sie erneut das --group Tag verwenden:

$ poetry remove streamlit --group ui

Der remove Befehl deinstalliert das Paket sauber, zusammen mit seinen transitiven Abhängigkeiten.

Ein Projekt mit Poetry auf PyPI veröffentlichen

Wenn Ihr Projekt zur Verteilung bereit ist, ermöglicht das Veröffentlichen auf PyPI (Python Package Index) anderen Entwicklern, Ihren Code einfach zu installieren und zu verwenden über pip. Poetry macht diesen Prozess mit nur zwei Befehlen zum Kinderspiel:

$ poetry build # Distributionen erstellen $ poetry publish # Auf PyPI veröffentlichen

Bevor Sie diese Befehle ausführen, sollten Sie Ihre PyPI-Anmeldeinformationen korrekt einrichten. Erstellen Sie zunächst Ihre Konten unter:

  1. PyPI
  2. TestPyPI

Konfigurieren Sie Poetry mit Ihren Anmeldeinformationen:

$ poetry config pypi-token.pypi your-pypi-token $ poetry config pypi-token.testpypi your-test-pypi-token

Testen Sie nun zuerst Ihr Paket:

# Konfigurieren Sie das TestPyPI-Repository $ poetry config repositories.testpypi https://test.pypi.org/legacy/ # Veröffentlichen Sie auf TestPyPI $ poetry build $ poetry publish -r testpypi

Nach der Veröffentlichung auf TestPyPI können Sie versuchen, Ihr Paket zu installieren, um zu überprüfen, ob alles gut funktioniert:

$ pip install --index-url https://test.pypi.org/simple/ your-package-name

Wenn alles gut läuft, können Sie es auf PyPI selbst veröffentlichen:

$ poetry publish

Best Practices beim Arbeiten mit Poetry

Es gibt viele Fallstricke und bewährte Verfahren bei der Verwendung von Poetry, und natürlich können wir sie nicht alle in einem einzigen Artikel erwähnen. Hier sind jedoch einige gängige, die Sie sofort anwenden können:

  1. Verwenden Sie immer virtuelle Umgebungen – Poetry erstellt sie automatisch für jedes Projekt
  2. Behalten Sie Ihre pyproject.toml Datei unter Versionskontrolle, aber schließen Sie poetry.lock für Bibliotheken aus
  3. Enthalten Sie poetry.lock in der Versionskontrolle für Anwendungen, um reproduzierbare Builds zu gewährleisten
  4. Verwenden Sie semantische Versionierung für die Versionen Ihrer Pakete (Hauptversion.Nebenversion.Patch). Sie können poetry version patch/minor/major-Befehle verwenden, um die Paketversionen um eins zu erhöhen. Zum Beispiel ändert poetry version major die Version von 0.2.0 zu 1.0.0 in Ihrer pyproject.toml-Datei.
  5. Geben Sie die Abhängigkeitsversionsbeschränkungen sorgfältig an, um Konflikte zu vermeiden
  6. Aktualisieren Sie regelmäßig Abhängigkeiten mit poetry update aber testen Sie gründlich nach den Updates
  7. Verwenden Sie poetry add --group dev für Entwicklungsmodule, um sie getrennt zu halten
  8. Dokumentieren Sie alle Zwecke der Abhängigkeiten in pyproject.toml mit Kommentaren
  9. Führen Sie poetry check vor Commits aus, um die Syntax der pyproject.toml zu validieren. Sie können auch pre-commit Hooks in Betracht ziehen.
  10. Verwenden Sie poetry export, um requirements.txt bei Bedarf für andere Tools zu generieren.
  11. Halten Sie Produktionsabhängigkeiten minimal – verschieben Sie optionale Funktionen in Extras
  12. Testen Sie die Installation Ihres Pakets in einer sauberen Umgebung, bevor Sie es veröffentlichen
  13. Verwenden Sie TestPyPI, bevor Sie zum Haupt-PyPI-Repository veröffentlichen
  14. Führen Sie ein klares CHANGELOG.md zur Verfolgung von Versionsänderungen
  15. Verwenden Sie poetry run für die Skriptausführung, um die korrekte Verwendung der Umgebung sicherzustellen

Fazit und nächste Schritte

Poesie hat die Python-Abhängigkeitsverwaltung revolutioniert, indem sie eine robuste, intuitive Lösung für gängige Paketverwaltungsprobleme bietet. Der leistungsstarke Funktionsumfang für die Abhängigkeitsauflösung, das Verwalten virtueller Umgebungen und das Veröffentlichen von Projekten machen es zu einem unschätzbaren Werkzeug für die moderne Python-Entwicklung.

Um Ihre Python-Entwicklung fortzusetzen, sollten Sie diese umfassenden Lernpfade erkunden:

Denken Sie daran, dass effektives Abhängigkeitsmanagement nur ein Aspekt der professionellen Python-Entwicklung ist. Wenn Sie sich weiterentwickeln, werden Tools wie Poetry Ihnen helfen, wartbare und zuverlässige Python-Projekte zu erstellen.

Source:
https://www.datacamp.com/tutorial/python-poetry