GitHubから自動でPyPIへパッケージ登録

久しぶりに公開しているパッケージ(django-compositepk-model)を更新する必要が出た。

色々新し方法に変わっているようで、パッケージ作成方法をhatchに変更し、GitHubからタグ付け時に自動でパッケージ作成し登録(公開)するようにした。

PyPIの管理画面から案内が出ていた新しいパッケージの作成方法については、以下ページ。

Python Packaging User Guide

日本語ページは以下。

https://packaging.python.org/ja/latest/guides/section-build-and-publish

色々書いてあるが、以下手順で行った。

1)pyproject.toml を書く

プロジェクト直下にpyproject.tomlファイルを作成する。説明通りに順に自分のプロジェクト用を作成した。

  • ビルドバックエンドはhatch用を設定
  • バージョンについては固定値にした※
  • 「実行可能なスクリプトを作成する」「先進的なプラグイン」は関係なし

※バージョンアップ時には、これを書き換えて、タグ付けを行う

自分のプロジェクト構成が特殊で、hatchの標準のディレクトリ構成に合っていないので、hatch用のターゲットファイル指定を追記した。

https://hatch.pypa.io/latest/config/build

今回のパッケージの例では、以下。

https://github.com/Arisophy/django-compositepk-model/blob/main/pyproject.toml

以前のパッケージと構成が合うように、以下を追加している。

[tool.hatch.build.targets.sdist]
include = [
  "compositepk-model/cpkmodel/*.py",
]

[tool.hatch.build.targets.wheel]
packages = ["cpkmodel/"]

[tool.hatch.build.targets.wheel.force-include]
"compositepk-model/cpkmodel" = "cpkmodel"

2)pyproject.tomlの確認

※本手順は、以下3-2)のGitHub上のワークフロー定義でbuildだけを動くようにして(タグを付けなければbuildのみ実行)、作成されたファイルをActionsの結果からダウンロードして確認でもOK

念のため、以前のパッケージと同じ構成でパーケージ作成されることを確認。

ローカルの開発環境で、hatchをインストールして、

pip install hatch

ビルドを行い

hatch build

pyproject.tomlの記述に問題がなく、正しい構成でパッケージが作成されることを確認した。

3)GitHub Actions CI/CD ワークフローを用いてパッケージ配布物のリリースを公開する

「TestPyPI へ公開」 と「配布パッケージに署名する」は必要ないので、以下を行う。

3-1)PyPI側でGitHubからの連携許可

https://pypi.org/manage/account/publishing/ で以下を登録。

  • PyPI Project Name:PyPIのプロジェクト名
  • オーナー:自分のGitHubアカウント
  • Repository name:GitHubのレポジトリ名
  • Workflow name:後で定義するので、適当な名前(release.yml等)

Environment nameは、空欄のままでよい。

3-2)GitHub側でワークフロー定義

.github/workflows/ ディレクトリに、上で定義したWorkflow nameのファイル名でワークフロー定義を作成する。

「配布パッケージに署名する」以下は無視で、基本そのままコピーして、以下のパッケージ名を変えれば良い。

 url: https://pypi.org/p/<package-name>  # Replace <package-name> with your PyPI project name

あとは、起動条件が単にpush時のままでは、ビルドは毎回動くので、以下を参考に条件を付けるとよい。

https://docs.github.com/ja/actions/using-workflows/triggering-a-workflow#using-filters-to-target-specific-branches-or-tags-for-push-events

今回のパッケージの例は以下。

https://github.com/Arisophy/django-compositepk-model/blob/main/.github/workflows/release.yml

Actionのバージョンは、古いとワーニングが出るので、現時点での最新に書き換えている。

4)実行

パッケージを更新する場合には、

  • pyproject.tomlファイルのバージョンを書き換え
  • タグ付けしてpush

すれば、自動でパッケージのバージョンアップ登録されるようになる。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください