Skip to content

tox の実行を高速化する

改善 1: フォーマッターとリンターをひとつの環境にまとめる

Section titled “改善 1: フォーマッターとリンターをひとつの環境にまとめる”

check という環境を定義し、isort, black, flake8 の 3 つをそこにまとめることでセットアップ処理のオーバーヘッドを減らしました。

[tox]
envlist = py37, py38, py39, mypy, check
[testenv:check]
deps =
isort
black
flake8
commands =
isort --check --diff .
black --check --diff .
flake8

改善 2: 不要なインストール処理の削減

Section titled “改善 2: 不要なインストール処理の削減”

改善 1 で作成された check 環境はフォーマッターやリンターなど静的解析なので pywc のインストール処理は不要です。 skip_install=true という設定を行うことで処理を飛ばすことができます。

[testenv:check]
# フォーマッターやリンターの実行にインストールは不要なのでスキップする
skip_install = True

改善 3: 作成するディストリビューションを wheel 形式にする

Section titled “改善 3: 作成するディストリビューションを wheel 形式にする”

tox のデフォルトでは sdist が作成され、各環境にインストールされるようになっています。これを wheel にすることでインストールが高速化されます。 注意: もしプロジェクトに C 言語等で書かれた拡張モジュールが含まれている場合、基本的には Python のバージョンごとに wheel 作成する必要があるのでこの高速化の効果は薄いと想定されます。

[testenv]
deps = pytest
commands = pytest
# 拡張モジュールを含まないPythonディストリビューションの場合、
# 以下のようにpackage, wheel_build_envを設定することで高速化できる:
# https://tox.wiki/en/latest/config.html#python-run
package = wheel
wheel_build_env = .pkg

parallel-run コマンドを使うことで各環境を並列実行することができるので、さらに実行時間を短くすることができます。

TOX_OPTION: run-parallel --parallel-no-spinner