Heim >Backend-Entwicklung >Python-Tutorial >Vertrauenswürdige Veröffentlichung – Es war noch nie einfacher, Ihre Python-Pakete zu veröffentlichen

Vertrauenswürdige Veröffentlichung – Es war noch nie einfacher, Ihre Python-Pakete zu veröffentlichen

Barbara Streisand
Barbara StreisandOriginal
2024-12-06 18:04:15515Durchsuche

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.

So veröffentlichen Sie Ihr Python-Paket mit Trusted Publishing

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.

Bereiten Sie Ihr Paket für die Veröffentlichung vor

Stellen Sie sicher, dass Ihr Python-Paket den Verpackungsrichtlinien von PyPI entspricht. Sie benötigen mindestens:

  • Eine setup.py- oder pyproject.toml-Datei, die Ihre Paketmetadaten definiert.
  • Richtig strukturierter Code mit klarem Verzeichnislayout.
  • Eine README-Datei zur Präsentation Ihres Projekts auf PyPI.

Eine detaillierte Checkliste finden Sie im Python Packaging-Benutzerhandbuch.

Konfigurieren Sie GitHub-Aktionen in Ihrem Repository

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

Konfigurieren Sie GitHub-Umgebungen

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.

Trusted publishing ‐ It has never been easier to publish your python packages

Trusted publishing ‐ It has never been easier to publish your python packages

Beschränken Sie anhand von Regeln oder Benennungsmustern, welche Zweige und Tags in dieser Umgebung bereitgestellt werden können.

Trusted publishing ‐ It has never been easier to publish your python packages

Begrenzen Sie basierend auf Benennungsmustern, welche Zweige und Tags in dieser Umgebung bereitgestellt werden können.

Trusted publishing ‐ It has never been easier to publish your python packages

Konfigurieren Sie die Ziel-Tags.

Trusted publishing ‐ It has never been easier to publish your python packages

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.

Trusted publishing ‐ It has never been easier to publish your python packages

Richten Sie ein PyPI-Projekt ein und verknüpfen Sie Ihr GitHub-Repository

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.

Trusted publishing ‐ It has never been easier to publish your python packages

Wiederholen Sie den obigen Vorgang für PyPI, wobei der Umgebungsname auf „Release“ eingestellt ist.

Testen Sie den Workflow

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.

Was nicht abgedeckt war

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.

Zusammenfassung

Wenn Sie bisher mit der Veröffentlichung Ihrer Arbeit zurückgehalten haben, ist jetzt der perfekte Zeitpunkt, Trusted Publishing auszuprobieren.

  • Vorstellung von „vertrauenswürdigen Herausgebern“ Der Python Package Index Blog stellt eine sicherere Veröffentlichungsmethode vor, die keine Weitergabe langlebiger Passwörter oder API-Tokens an externe Systeme erfordert
  • Mit einem vertrauenswürdigen Herausgeber auf PyPI veröffentlichen Die offizielle PyPI-Dokumentation für den Einstieg in die Verwendung vertrauenswürdiger Herausgeber auf PyPI.
  • Erstellen und Testen von Python in den offiziellen GitHub-Dokumenten.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn