LoginSignup
5
4

More than 1 year has passed since last update.

GitHub Actions で開発中の Python を使ってテストを実行する

Posted at

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。ぜひチャレンジしてみてください。


  1. README などには記載がないのですが、 Python 3.10 alphas? · Issue #150 · actions/setup-python というイシューのコメントで紹介されています。 

  2. たとえば 3.10.0b1 リリース直前には pytest が動かなくなる問題を見つけたりしました。すでに他の方にバグ報告されていたので、結果的に眺めていただけだったのですが、誰がかみつけてくれるだろう、と取りこぼすよりハッピーになれる気がします。 

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4