Python Tools

Veröffentlichung eines Python-Pakets auf PyPI mit Poetry

Poetry vereinfacht den Veröffentlichungsprozess von Python-Paketen auf PyPI erheblich. Durch wenige einfache Befehle kannst Du Dein Paket veröffentlichen und verwalten. Sobald Dein Paket auf PyPI verfügbar ist, können andere Entwickler es installieren und verwenden.


4 Minuten Lesezeit
02 Nov 2024
Veröffentlichung eines Python-Pakets auf PyPI mit Poetry

Was lerne ich in diesem Kurs?

Poetry ist ein beliebtes Tool zum Verwalten von Abhängigkeiten und Erstellen von Python-Paketen. Wenn Du ein eigenes Python-Paket auf dem Python Package Index (PyPI) veröffentlichen möchtest, kannst Du dies einfach mit Poetry tun. In diesem Tutorial zeige ich Dir, wie Du ein Paket vorbereitest und auf PyPI veröffentlichst.

Voraussetzungen

Um ein Paket auf PyPI zu veröffentlichen, benötigst Du ein PyPI-Konto. Gehe dazu auf pypi.org und registriere Dich, falls Du noch kein Konto hast. Installiere auch Poetry, falls noch nicht geschehen. Du kannst Poetry unter Linux mit dem folgenden Befehl installieren:

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

Falls du dich auf einem anderen System befindest oder curl kein Weg für dich ist, gibt es auch noch andere Möglichkeiten, Peotry zu installieren:

Poetry installieren

Erstellen eines neuen Pakets mit Poetry

Beginne mit der Erstellung eines neuen Python-Projekts mit Poetry. Wechsle in das Verzeichnis, in dem das Paket gespeichert werden soll, und führe den folgenden Befehl aus:

poetry new mein_paket

Poetry erstellt eine Ordnerstruktur mit der Datei pyproject.toml, in der alle Paketinformationen und Abhängigkeiten definiert werden.

mein_paket
├── pyproject.toml
├── README.md
├── mein_paket
│   └── __init__.py
└── tests
    └── __init__.py

In der Datei pyproject.toml findest Du Einträge wie name, version, description, und author. Ändere diese Einträge nach Deinen Anforderungen, da sie die Metadaten Deines Pakets auf PyPI festlegen. Ein Beispiel für eine bearbeitete pyproject.toml sieht so aus:

[tool.poetry]
name = "mein-paket"
version = "0.1.0"
description = ""
authors = ["Captain Solaris <hello@example.com>"]
readme = "README.md"

[tool.poetry.dependencies]
python = "^3.12"


[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"

Die Zeile python gibt die Python-Version an, die das Paket benötigt. In diesem Beispiel wird Python 3.12 oder höher vorausgesetzt.

Neue Dependencies hinzufügen

Um neue Abhängigkeiten hinzuzufügen, können die entweder unter den Dependencies manuell oder per folgendem Befehlt interaktiv eingetragen werden.

poetry add pendulum

Um zu sehen, wo die virtuelle Umgebung für das Projekt angelegt wurde, in die die Pakete installiert werden, kann dieser Befehl genutzt werden

poetry env info

Um eine Datei mit Poetry zu starten, wird der RUN-Befehl benötigt.

poetry python run main.py

Anlegen von Dependency-Gruppen

Mit dem groups-Befehl lassen sich Gruppen von Dependencies anlegen. Im folgenden Beispiel wird eine Gruppe dev angelegt und ihr einige Dependencies zugewiesen.

poetry add --group dev black flake8 isort mypy pylint

automatisch wird die Gruppe in die pyproject.toml eingetragen.

[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"

Um einen Linter zu starten, führt man wieder das RUN Command aus:

poetry run black .

Löschen von Dependencies aus einer Gruppe führt über remove:

poetry remove --group dev ruff

Um beim Installieren der Dependencies in einer anderen Umgebung, zum Beispiel einer Produktiv-Umgebung, nur die Main-Dependencies zu installieren, muss der Install-Befehl so ausgeführt werden.

rm poetry.lock
poetry env remove --all
poetry install --without test,dev

Testen des Pakets

Bevor Du das Paket veröffentlichst, teste es lokal. Wechsle dazu in das Projektverzeichnis und baue das Paket mit Poetry. Es werden nur die Dependencies genutzt, die unter den Main-Dependencies eingetragen sind. Dev und Test-Gruppen werden im Build-Prozess ignoriert.

poetry build

Poetry erstellt im Ordner dist zwei Dateien: ein Wheel und eine Source Distribution (tar.gz). Diese beiden Dateien sind die distributablen Versionen Deines Pakets. Installiere das Paket lokal, um sicherzustellen, dass alles funktioniert

pip install dist/mein_paket-0.1.0-py3-none-any.whl

Wenn alles wie erwartet läuft, bist Du bereit für die Veröffentlichung.

Anmeldung bei PyPI

Für die Veröffentlichung auf PyPI muss Poetry Deine Anmeldedaten kennen. Führe den folgenden Befehl aus, um Dich bei PyPI anzumelden und einen API-Token zu erstellen

poetry config pypi-token.pypi <DEIN_API_TOKEN>

Gehe auf pypi.org, melde Dich an, und gehe zu Account Settings. Erstelle einen neuen API-Token und ersetze durch den tatsächlichen Token-Wert. Dadurch speichert Poetry Deine PyPI-Anmeldedaten und Du kannst das Paket sicher veröffentlichen.

Veröffentlichung des Pakets auf PyPI

Wenn alle vorherigen Schritte erfolgreich abgeschlossen sind, kannst Du das Paket mit einem einzigen Befehl auf PyPI veröffentlichen

poetry publish --build

Mit der Option --build erstellt Poetry das Paket erneut und lädt es auf PyPI hoch. Falls alles korrekt ist, erscheint Dein Paket in wenigen Minuten auf pypi.org und ist damit öffentlich verfügbar.

Aktualisieren des Pakets

Falls Du später eine neue Version des Pakets veröffentlichen möchtest, erhöhe die Versionsnummer in der Datei pyproject.toml. Ändere z. B. die Zeile version von 0.1.0 auf 0.2.0. Führe dann erneut poetry publish --build aus, um die aktualisierte Version auf PyPI zu veröffentlichen.

[tool.poetry]
version = "0.2.0"

Durch das Ändern der Versionsnummer und erneutes Veröffentlichen stellst Du sicher, dass Benutzer immer die neueste Version Deines Pakets erhalten.