ホームページ >バックエンド開発 >Python チュートリアル >信頼できる公開 - Python パッケージの公開がかつてないほど簡単になりました

信頼できる公開 - Python パッケージの公開がかつてないほど簡単になりました

Barbara Streisand
Barbara Streisandオリジナル
2024-12-06 18:04:15513ブラウズ

Python パッケージの公開はかつては困難な作業でしたが、今はそうではありません。さらに良いことに、安全性が大幅に向上しました。 CLI ツールに依存しながら、ユーザー名、パスワード、または API トークンをやりくりする時代は終わりました。信頼できる公開では、GitHub リポジトリの詳細を PyPI に提供するだけで、GitHub Actions が面倒な作業を処理します。

信頼できる公開で Python パッケージを公開する方法

(開発ブランチで) タグが作成されたときにパッケージを TestPyPi に公開するか、メイン ブランチにマージするときに PyPi にパッケージを公開するワークフローを紹介します。

パッケージの公開を準備する

Python パッケージが PyPI のパッケージ化ガイドラインに従っていることを確認してください。少なくとも次のものが必要です:

  • パッケージのメタデータを定義する setup.py または pyproject.toml ファイル。
  • 明確なディレクトリ レイアウトを備えた適切に構造化されたコード。
  • PyPI でプロジェクトを紹介するための README ファイル。

詳細なチェックリストについては、Python パッケージング ユーザー ガイドを参照してください。

リポジトリで GitHub アクションを構成する

新しい GitHub アクション .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

このアクションにより、パッケージがビルドされ、ビルドされたホイールとソース ディストリビューション (SDist) が GitHub Actions アーティファクトとしてアップロードされます。

次に、TestPyPI に公開するステップを追加します。このステップはタグが作成されるたびに実行され、前のステップのビルドが正常に完了したことを確認します。 PROJECT_OWNER と PROJECT_NAME をリポジトリの適切な値に置き換えます。

  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/

このステップでは、ビルド プロセス中に作成されたアーティファクトをダウンロードし、テストのために TestPyPI にアップロードします。

最後のステップでは、プル リクエストがメイン ブランチにマージされるときに、パッケージを PyPI にアップロードします。

  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

GitHub環境を構成する

特定のタグのみが公開ワークフローをトリガーし、リリース プロセスの制御を維持するため。
[設定] -> [設定] に移動して、新しい環境のテスト リリースを作成します。 GitHub リポジトリ内の環境。

環境を設定し、デプロイメントタグルールを追加します。

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

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

ルールまたは命名パターンに基づいて、この環境にデプロイできるブランチとタグを制限します。

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

命名パターンに基づいて、この環境にデプロイできるブランチとタグを制限します。

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

ターゲットタグを設定します。

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

パターン [0-9]*.[0-9]*.[0-9]* は、1.2.3、0.1.0、2.5.1b3 などのセマンティック バージョン管理タグと一致しますが、次のような任意のタグは除外されます。バグ修正-567 または機能更新。

リリース環境に対してこれを繰り返して、同じ方法でメイン ブランチを保護しますが、今回はメイン ブランチを対象とします。

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

PyPI プロジェクトをセットアップし、GitHub リポジトリをリンクする

アカウントをお持ちでない場合は、TestPyPI でアカウントを作成します。
アカウントの「公開」に移動し、新しい保留中のパブリッシャーを追加します。
名前、GitHub ユーザー名、リポジトリ名、ワークフロー名 (test-build-publish.yml)、および環境名 (test-release) を指定して、GitHub リポジトリを PyPI プロジェクトにリンクします。

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

環境名を release に設定して、PyPI で上記の操作を繰り返します。

ワークフローをテストする

開発ブランチでタグを作成すると、リリースが TestPyPI にアップロードされるようになり、開発ブランチを main にマージすると、リリースが PyPI にアップロードされます。

カバーされなかった内容

このガイドでは信頼できる公開ワークフローの概要を説明しますが、実装を検討できる追加の手順とベスト プラクティスもあります。たとえば、ブランチ保護ルールを設定すると、承認されたコラボレーターのみがタグをプッシュしたり、main やdevelopment などの保護されたブランチにマージしたりできるようになります。また、マージ前にステータス チェックを強制したり、プル リクエストのレビューを要求したりして、品質保証の層を追加することもできます。

私の python-repository-template を見てください。このワークフローへの追加の機能強化 (単体テストと静的テストに合格する必要があること、pyroma でパッケージをチェックすること、vercheck でタグがパッケージのバージョンと一致することを確認することなど) をカバーしています。

まとめ

これまで自分の作品を共有することをためらっていたなら、今が信頼できる出版を試してみる絶好の機会です。

  • 「信頼できる発行者」の紹介 Python Package Index Blog では、長期有効なパスワードや API トークンを外部システムと共有する必要がない、より安全な発行方法を紹介しています
  • 信頼できる発行元を使用した PyPI への公開 PyPI で信頼できる発行元の使用を開始するための公式 PyPI ドキュメント。
  • 公式 GitHub ドキュメントの Python のビルドとテスト。

以上が信頼できる公開 - Python パッケージの公開がかつてないほど簡単になりましたの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。