Das Veröffentlichen von Python-Paketen war früher eine entmutigende Aufgabe, aber nicht mehr. Noch besser: Es ist deutlich sicherer geworden. Vorbei sind die Zeiten, in denen man mit Benutzernamen, Passwörtern oder API-Tokens jonglieren und sich dabei auf CLI-Tools verlassen musste. Beim Trusted Publishing stellen Sie PyPI einfach die Details Ihres GitHub-Repositorys zur Verfügung und GitHub Actions übernimmt die schwere Arbeit.
Ich werde einen Workflow einführen, der Ihr Paket auf TestPyPi veröffentlicht, wenn ein Tag erstellt wird (im Entwicklungszweig), oder auf PyPi, wenn Sie es mit dem Hauptzweig zusammenführen.
Stellen Sie sicher, dass Ihr Python-Paket den Verpackungsrichtlinien von PyPI entspricht. Sie benötigen mindestens:
Eine detaillierte Checkliste finden Sie im Python Packaging-Benutzerhandbuch.
Beginnen wir mit der Erstellung einer neuen GitHub-Aktion .github/workflows/test-build-publish.yml.
name: test-build-publish on: [push, pull_request] permissions: contents: read jobs: build-and-check-package: name: Build & inspect our package. runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: hynek/build-and-inspect-python-package@v2
Diese Aktion erstellt Ihr Paket und lädt das erstellte Rad und die Quelldistribution (SDist) als GitHub Actions-Artefakte hoch.
Als nächstes fügen wir einen Schritt zum Veröffentlichen in TestPyPI hinzu. Dieser Schritt wird jedes Mal ausgeführt, wenn ein Tag erstellt wird, um sicherzustellen, dass der Build aus dem vorherigen Schritt erfolgreich abgeschlossen wurde. Ersetzen Sie PROJECT_OWNER und PROJECT_NAME durch die entsprechenden Werte für Ihr Repository.
test-publish: if: >- github.event_name == 'push' && github.repository == 'PROJECT_OWNER/PROJECT_NAME' && startsWith(github.ref, 'refs/tags') needs: build-and-check-package name: Test publish on TestPyPI runs-on: ubuntu-latest environment: test-release permissions: id-token: write steps: - name: Download packages built by build-and-check-package uses: actions/download-artifact@v4 with: name: Packages path: dist - name: Upload package to Test PyPI uses: pypa/gh-action-pypi-publish@release/v1 with: repository-url: https://test.pypi.org/legacy/
In diesem Schritt werden die während des Build-Prozesses erstellten Artefakte heruntergeladen und zum Testen auf TestPyPI hochgeladen.
Im letzten Schritt laden wir das Paket auf PyPI hoch, wenn eine Pull-Anfrage in den Hauptzweig eingebunden wird.
publish: if: >- github.event_name == 'push' && github.repository == 'PROJECT_OWNER/PROJECT_NAME' && github.ref == 'refs/heads/main' needs: build-and-check-package name: Publish to PyPI runs-on: ubuntu-latest environment: release permissions: id-token: write steps: - name: Download packages built by build-and-check-package uses: actions/download-artifact@v4 with: name: Packages path: dist - name: Publish distribution ? to PyPI for push to main uses: pypa/gh-action-pypi-publish@release/v1
Um sicherzustellen, dass nur bestimmte Tags den Veröffentlichungsworkflow auslösen und die Kontrolle über Ihren Veröffentlichungsprozess behalten.
Erstellen Sie eine neue Testversion der Umgebung, indem Sie zu „Einstellungen“ -> „Einstellungen“ navigieren. Umgebungen in Ihrem GitHub-Repository.
Richten Sie die Umgebung ein und fügen Sie eine Bereitstellungs-Tag-Regel hinzu.
Beschränken Sie anhand von Regeln oder Benennungsmustern, welche Zweige und Tags in dieser Umgebung bereitgestellt werden können.
Begrenzen Sie basierend auf Benennungsmustern, welche Zweige und Tags in dieser Umgebung bereitgestellt werden können.
Konfigurieren Sie die Ziel-Tags.
Das Muster [0-9]*.[0-9]*.[0-9]* entspricht semantischen Versionierungs-Tags wie 1.2.3, 0.1.0 oder 2.5.1b3, schließt jedoch beliebige Tags wie aus Bugfix-567 oder Feature-Update.
Wiederholen Sie dies für die Release-Umgebung, um den Hauptzweig auf die gleiche Weise zu schützen, diesmal jedoch mit Ausrichtung auf den Hauptzweig.
Erstellen Sie ein Konto auf TestPyPI, falls Sie noch keins haben.
Navigieren Sie zu Ihrem Konto, „Veröffentlichen“ und fügen Sie einen neuen ausstehenden Herausgeber hinzu.
Verknüpfen Sie Ihr GitHub-Repository mit dem PyPI-Projekt, indem Sie dessen Namen, Ihren GitHub-Benutzernamen, den Repository-Namen, den Workflow-Namen (test-build-publish.yml) und den Umgebungsnamen (test-release) angeben.
Wiederholen Sie den obigen Vorgang für PyPI, wobei der Umgebungsname auf „Release“ eingestellt ist.
Wenn Sie jetzt ein Tag in Ihrem Entwicklungszweig erstellen, wird ein Release auf TestPyPI hochgeladen, und durch das Zusammenführen des Entwicklungszweigs mit dem Hauptzweig wird ein Release auf PyPI hochgeladen.
Während dieser Leitfaden eine Einführung in vertrauenswürdige Veröffentlichungsworkflows bietet, gibt es zusätzliche Schritte und Best Practices, die Sie möglicherweise in Betracht ziehen. Durch das Einrichten von Zweigschutzregeln kann beispielsweise sichergestellt werden, dass nur autorisierte Mitarbeiter Tags übertragen oder in geschützte Zweige wie „main“ oder „develop“ einbinden können. Sie können auch Statusprüfungen erzwingen oder Pull-Request-Überprüfungen vor der Zusammenführung verlangen und so eine weitere Ebene der Qualitätssicherung hinzufügen.
Schauen Sie sich meine Python-Repository-Vorlage an, die zusätzliche Verbesserungen dieses Workflows abdeckt, z. B. das Erfordernis, dass Unit- und statische Tests bestanden werden müssen, das Überprüfen des Pakets mit Pyroma und das Sicherstellen, dass Ihr Tag mit der Version Ihres Pakets übereinstimmt, mit Vercheck.
Wenn Sie bisher mit der Veröffentlichung Ihrer Arbeit zurückgehalten haben, ist jetzt der perfekte Zeitpunkt, Trusted Publishing auszuprobieren.
Das obige ist der detaillierte Inhalt vonVertrauenswürdige Veröffentlichung – Es war noch nie einfacher, Ihre Python-Pakete zu veröffentlichen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!