Python 3.10 もついに beta1 がリリースされ、いよいよ正式版のリリースの足音も徐々に聞こえてきました。
PEP-619 では以下のようにリリーススケジュールが設定されています。
- 3.10.0 beta 2: Tuesday, 2021-05-25
- 3.10.0 beta 3: Thursday, 2021-06-17
- 3.10.0 beta 4: Saturday, 2021-07-10
- 3.10.0 candidate 1: Monday, 2021-08-02
- 3.10.0 candidate 2: Monday, 2021-09-06 (if necessary)
- 3.10.0 final: Monday, 2021-10-04
beta1 が出たことにより、フィーチャーフリーズにより追加となる機能も確定したので、Python の開発としては 3.10 を安定させていくというフェーズに入っていくはずです。ここに対して僕らができることといえば、3.10 を使って CI を回していき、問題点をレポートしていくことですよね。
ということで、今回は GitHub Actions で開発中の (正式リリース前の) Python を使ったテスト方法についてご紹介します。
最新のβ版パッケージをインストールする
と前口上を述べたのですが、最新のβ版パッケージをインストールするのは非常にかんたんです。
GitHub Actions で Python をインストールする際に actions/setup-python を使っている方が多いと思いますが、なんとこの actions/setup-python はβ版のインストールに対応しているのです1。
3.10 系の開発版をインストールする場合は python-version に '3.10-dev'
と指定します。すると、自動的に最新の開発バージョンが選択され、インストールされます。
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2
with:
python-version: '3.10-dev'
- run: python my_script.py
流石に開発版オンリーでテストするひとはいないでしょうから、matrix build の指定に '3.10-dev'
を加えると良いでしょう。
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ['3.6', '3.7', '3.8', '3.9', '3.10-dev']
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
- run: python my_script.py
これだけで、秋にリリースされる 3.10 系でのテストができるので、お得な感じですね。
真の最新版を追いかける
しかし、もっとディープに Python の最新版を追いかけたいという方も世には多くいるはずです。そんなあなたは deadsnakes/action を使いましょう。
deadsnakes プロジェクトは新旧さまざまな Python の Ubuntu パッケージをビルドして提供しているプロジェクトです。開発環境の構築で使ったことがある方もいらっしゃると思います。
この deadsnakes プロジェクトは nightly build の Python パッケージも提供しており、さらに GitHub Actions 用のアクションも提供しているので、これを組み込むだけでかんたんに nightly build でテストができるようになります。
deadsnakes/action は、次のように actions/setup-python と組み合わせて使うことが推奨されています。
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: [3.6, 3.7, 3.8, 3.9-dev, 3.10-dev]
name: main
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2
if: "!endsWith(matrix.python-version, '-dev')"
with:
python-version: ${{ matrix.python-version }}
- uses: deadsnakes/action@v2.1.1
if: endsWith(matrix.python-version, '-dev')
with:
python-version: ${{ matrix.python-version }}
- run: python --version --version && which python
-dev
が末尾についている場合は deadsnakes/action が、それ以外の場合は actions/setup-python が利用されるように if 文で分岐します。
nightly build 版はベータ版がリリースされる前から(それこそアルファ版が出る前から)提供され続けているので、いまから 3.11 向けの CI を動かしてみると面白いかもしれませんね。すでに 3.11-dev
として提供が開始されています。
まとめ
今回は開発版の Python をインストールする方法を 2種類を紹介しました。
- actions/setup-python:
- リリースされた開発版パッケージ (α版、β版) をインストールする
- deadsnakes/action:
- nightly build をインストールする
このふたつのうち、好みに合わせてお好きな方を使い分けると良さそうです。
開発中のバージョンで CI をしながら、Python 本体や関連ツールの不具合を見つけてバグ報告するというのも、OSS への貢献のひとつです 2。ぜひチャレンジしてみてください。
-
README などには記載がないのですが、 Python 3.10 alphas? · Issue #150 · actions/setup-python というイシューのコメントで紹介されています。 ↩
-
たとえば 3.10.0b1 リリース直前には pytest が動かなくなる問題を見つけたりしました。すでに他の方にバグ報告されていたので、結果的に眺めていただけだったのですが、誰がかみつけてくれるだろう、と取りこぼすよりハッピーになれる気がします。 ↩