PyO3はRustで書いたプログラムをPythonで動かせる大変優れたものです。しかしGitHub Actionsでテストしようとしたら少し詰まったのでメモ。
pyproject.toml
maturin
でビルドするので、こんな感じで始まっているはずです。
[build-system]
requires = ["maturin>=0.14,<0.15"]
build-backend = "maturin"
その下の方に、テスト用のoptional dependenciesを加えておきます。
[project.optional-dependencies]
testing = [
"pytest",
# その他諸々 ...
"maturin", # <----- ここにも加える
]
これで pip install .[testing]
をしたときにここに書かれたパッケージもインストールされます。
test.yml
テスト用のCIはこんな感じになります。
jobs:
test:
name: ${{ matrix.platform }} (${{ matrix.python-version }})
runs-on: ${{ matrix.platform }}
strategy:
fail-fast: false
matrix:
python-version: ["3.10", "3.11", "3.12"]
platform: [ubuntu-latest, macos-latest, windows-latest]
steps:
- name: Cancel Previous Runs
uses: styfle/cancel-workflow-action@0.11.0
with:
access_token: ${{ github.token }}
- uses: actions/checkout@v3
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- name: Create virtual environment
env:
BIN: ${{ matrix.os == 'windows-latest' && 'Scripts' || 'bin' }}
run: |
python -m venv .venv
echo "$GITHUB_WORKSPACE/.venv/$BIN" >> $GITHUB_PATH
- name: Install dependencies
run: python -m pip install .[testing]
- name: Build
run: maturin develop --release
- name: Test
with:
run: python -m pytest
ここで重要なのが、
-
maturin
でビルドするときに仮想環境が必須なので、"Create virtual environment"でvenv
を適切な場所に作ること。 - "Install dependencies"で先ほど用意した"testing"を指定してインストールすること。
- "Build" でmaturinによるビルドを行うこと。
これで走るはずです。