Veröffentlichen und auf PyPI publizieren
Dieser Leitfaden beschreibt den verifizierten Veröffentlichungsablauf: CHANGELOG → Versionserhöhung → Tag → automatisiertes Publizieren (TestPyPI → PyPI → GitHub Release). Die Automatisierung befindet sich in .github/workflows/publish.yml und wird bei v*-Tags über PyPI Trusted Publishing (OIDC — keine langlebigen Tokens) ausgelöst.
Einmalige Einrichtung (Maintainer — bereits erledigt)
Der Publish-Workflow verwendet Trusted Publishing und GitHub Environments. Dies ist bereits konfiguriert und betriebsbereit; es wird hier zur Referenz und Wiederherstellung festgehalten:
- PyPI / TestPyPI — Trusted Publisher für
nene2-python:- Owner:
hideyukiMORI, Repository:nene2-python - Workflow:
publish.yml - Environment:
pypi(auf pypi.org) undtestpypi(auf test.pypi.org) - Registriert unter https://pypi.org/manage/account/publishing/ und dem TestPyPI-Äquivalent.
- Owner:
- GitHub-Repo → Settings → Environments:
testpypiundpypiexistieren (fügen Sie bei Bedarf erforderliche Reviewer aufpypifür ein manuelles Genehmigungstor hinzu).
Das Paket ist veröffentlicht — pip install nene2-python installiert die neueste Version (v1.8.163+) direkt von PyPI.
Veröffentlichungsablauf (pro Release)
CHANGELOG.mdaktualisieren — einen## [X.Y.Z] — YYYY-MM-DD-Abschnitt hinzufügen. Der GitHub-Release-Schritt extrahiert Notizen durch Abgleich dieser Überschrift, daher muss der Abschnitt existieren, sonst sind die Release-Notizen leer.- Version erhöhen in
pyproject.tomlund Lock aktualisieren:bashuv lock - PR öffnen, CI bestehen (der
package-build-Job validiert die Distribution) und inmainmergen. - Tag und Push des Releases:bash
git checkout main && git pull git tag vX.Y.Z git push origin vX.Y.Z publish.ymlläuft automatisch:uv build→ auf TestPyPI publizieren → auf PyPI publizieren → GitHub Release mit Notizen aus CHANGELOG und angehängten dist-Artefakten erstellen.
Lokale Verifizierung (vor dem Tagging)
Der CI-package-build-Job führt dies bei jedem PR aus, aber Sie können es reproduzieren:
bash
uv build # sdist + wheel in dist/
uvx twine check dist/* # PyPI-Metadaten-Gültigkeit
uv venv /tmp/verify
uv pip install --python /tmp/verify/bin/python dist/*.whl
/tmp/verify/bin/python -c "import nene2; print('OK')" # sauberer Import; example/tests dürfen NICHT importierbar seinAb v1.8.163 besteht dies: twine check meldet PASSED, das Wheel importiert sauber in einer frischen venv, und nur src/nene2 wird ausgeliefert (example/tests werden durch [tool.hatch.build.targets.wheel] packages = ["src/nene2"] ausgeschlossen).
Hinweise
- Versionierung:
pyproject.tomlversionist die einzige Quelle der Wahrheit und wird pro FT / Feature / Fix-PR erhöht. Git-v*-Tags werden selektiv zum Release-Zeitpunkt erstellt (der Publish-Workflow wird nur bei Tags ausgelöst), sodasspyprojectden Tags voraus läuft. - CHANGELOG-Granularität: Pro-Version-Einzeiler befinden sich in der
docs/todo/current.md-Meilenstein-Tabelle;CHANGELOG.mdenthält auf Release zusammengefasste Einträge. - Dieses Verfahren entspricht dem FT7-Klassen-"publish flow"-Trial (#541): Der Ablauf ist vollständig betriebsbereit — v1.8.163 wurde darüber auf PyPI veröffentlicht und ist über
pip install nene2-pythoninstallierbar.