-
Notifications
You must be signed in to change notification settings - Fork 0
05 Publishing
Dieser Guide beschreibt den vollständigen Ablauf vom lokalen Projekt bis zum öffentlichen Paket auf pypi.org.
- Account auf pypi.org
- Optional: Account auf test.pypi.org (empfohlen für den ersten Durchlauf)
- Poetry installiert und Projekt läuft lokal (
make cibestanden) - 2FA auf PyPI aktiviert (Pflicht seit 2024)
Auf pypi.org einloggen, dann: Account Settings, API Tokens, "Add API token".
- Name: z.B.
manuscript-tools-publish - Scope: Beim ersten Mal "Entire account", danach auf das Projekt einschränken
Token kopieren (beginnt mit pypi-). Wird nur einmal angezeigt.
poetry config pypi-token.pypi pypi-DEIN_TOKEN_HIERDer Token wird in der Poetry-Konfiguration gespeichert, nicht im Projekt. Er landet also nicht im Git-Repository.
Für TestPyPI zusätzlich:
poetry config repositories.testpypi https://test.pypi.org/legacy/
poetry config pypi-token.testpypi pypi-DEIN_TEST_TOKENPyPI erfordert 2FA. Statt einer mobilen App lässt sich TOTP über pass-otp lokal und GPG-verschlüsselt verwalten.
- GPG mit gültigem privaten Schlüssel
-
passmit initialisiertem Store (~/.password-store) -
pass-otpPlugin (viabrew install pass-otpoderapt install pass-extension-otp)
pass otp insert -s --issuer PyPI --account dein-username pypi/dein-usernameDen 32-stelligen Secret Key eingeben (aus den PyPI 2FA-Einstellungen). Das Secret wird verschlüsselt unter ~/.password-store/pypi/dein-username.gpg abgelegt.
# Im Terminal anzeigen
pass otp pypi/dein-username
# Direkt in die Zwischenablage (löscht sich nach 45s)
pass otp -c pypi/dein-username- GPG-Key extern sichern (ohne ihn ist der Zugriff auf die TOTP-Seeds unmöglich)
- Store via
pass git pushauf ein privates Repository sichern - Recovery Codes separat speichern:
pass insert pypi/recovery_codes
Das Bump-Skript hält pyproject.toml und __init__.py synchron:
make bump-patch # 0.4.0 -> 0.4.1
make bump-minor # 0.4.0 -> 0.5.0
make bump-major # 0.4.0 -> 1.0.0Alternativ mit expliziter Version:
python scripts/bump_version.py 1.0.0make publish-testLäuft automatisch ci (Lint + Format + Tests), dann build, dann publish auf TestPyPI.
Testen ob die Installation funktioniert:
pip install --index-url https://test.pypi.org/simple/ manuscript-toolsmake publishGleicher Ablauf: ci, build, publish. Das Paket ist danach unter pypi.org/project/manuscript-tools verfügbar.
# 1. Version erhöhen
make bump-minor
# 2. Commit und Tag
git add -A
git commit -m "chore: bump version to $(poetry version -s)"
git tag -a "v$(poetry version -s)" -m "v$(poetry version -s)"
# 3. Push
git push origin main --tags
# 4. CI + Build + Publish (ein Kommando)
make publishOder über GitHub Actions (siehe Entwicklung und CI): Ein git push origin v0.5.0 löst automatisch den Publish-Workflow aus.
"File already exists": PyPI akzeptiert keine Version, die bereits existiert. Lösung: Version erhöhen, auch für Korrekturen.
"Invalid API token": Token abgelaufen oder falsch kopiert. Neues Token generieren und mit poetry config pypi-token.pypi erneut setzen.
"403 Forbidden": 2FA-Code fehlt oder abgelaufen. Mit pass otp pypi/dein-username neuen Code abrufen.
CI schlägt vor Publish fehl: make publish führt make ci als Vorbedingung aus. Lint- oder Testfehler verhindern den Publish. Das ist Absicht.
Zurück: Integration | Weiter: Entwicklung und CI