Python ノート



環境

新しい Python 環境を作成して使用し、特定のパッケージをインストールする方法については、 次の 2 つの例を参照してください。

Meson

python3 -m venv ~/venv/meson
source ~/venv/meson/bin/activate
pip install 'meson @ git+https://github.com/mesonbuild/meson.git'
meson --version


Pyvista

python3 -m venv ~/venv/pyvista/
source ~/venv/pyvista/bin/activate
pip install pyvista vtk pyqt6 pyvistaqt


PyPI への公開方法

pyproject.toml からビルドし、PyPI のトラステッドパブリッシングを使って GitHub Actions で公開する Python パッケージには、このワークフローを使用してください。

1. パッケージを準備する

pyproject.toml にプロジェクトのメタデータ、README、ライセンスファイル、 依存関係、オプションの依存関係、ビルドバックエンドが設定されていることを確認してください。 独自のライセンスの場合は、そのライセンスが実際に OSI の承認を受けていない限り、 OSI の Trove 分類子を指定しないようにしてください。

[build-system]
requires = ["hatchling", "hatch-vcs"]
build-backend = "hatchling.build"

[project]
name = "pygemc"
dynamic = ["version"]
readme = "README.md"
license = { file = "LICENSE.md" }
requires-python = ">=3.10"

[tool.hatch.version]
source = "vcs"
tag-pattern = "^v(?P<version>\\d+\\.\\d+\\.\\d+)$"

上記の tag-pattern は、v0.2.0 のような安定版タグのみがパッケージのバージョンを定義することを意味します。 参照先が更新される dev タグは、パッケージのバージョン決定では無視されます。

2. トラステッドパブリッシングを構成する

PyPI と TestPyPI で、GitHub ワークフローに一致する保留中のトラステッドパブリッシャーを 追加してください。

TestPyPI のトラステッドパブリッシャーの場合:

PyPI project name: pygemc
Owner: gemc
Repository name: pygemc
Workflow name: publish_pypi.yml
Environment name: testpypi

PyPI のトラステッドパブリッシャーの場合:

PyPI project name: pygemc
Owner: gemc
Repository name: pygemc
Workflow name: publish_pypi.yml
Environment name: pypi

GitHub ワークフローでは、公開先に対応する環境を設定する必要があります。

jobs:
  publish:
    runs-on: ubuntu-latest
    environment: ${{ inputs.repository }}

3. 安定版リリースタグを作成する

4. GitHub Actions から手動で公開する

Publish PyPI ワークフローを手動で実行します。

まず TestPyPI に公開します。

ref: v0.2.0
repository: testpypi

次に、パッケージに問題がなければ、PyPI に公開します。

ref: v0.2.0
repository: pypi

ワークフローでは、ブランチ、dev、および安定版ではないタグを拒否する必要があります。たとえば、 次のパターンに一致するタグのみを許可します。

^v[0-9]+\.[0-9]+\.[0-9]+$

5. リリースを検証する

PyPI でパッケージが認識されていることを確認します。

python -m pip index versions pygemc

新しい仮想環境にインストールします。

python3 -m venv /tmp/pygemc-check
source /tmp/pygemc-check/bin/activate
python -m pip install --upgrade pip
python -m pip install pygemc
python -c "import pygemc; print(pygemc.__name__)"

TestPyPI の場合は、通常の依存パッケージを引き続き検索できるように、PyPI を追加の インデックスとして指定しておきます。

python -m pip install \
  --index-url https://test.pypi.org/simple/ \
  --extra-index-url https://pypi.org/simple \
  pygemc