tox の実行を高速化する
改善 1: フォーマッターとリンターをひとつの環境にまとめる
Section titled “改善 1: フォーマッターとリンターをひとつの環境にまとめる”check という環境を定義し、isort, black, flake8 の 3 つをそこにまとめることでセットアップ処理のオーバーヘッドを減らしました。
[tox]envlist = py37, py38, py39, mypy, check
[testenv:check]deps = isort black flake8commands = 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 = pytestcommands = pytest# 拡張モジュールを含まないPythonディストリビューションの場合、# 以下のようにpackage, wheel_build_envを設定することで高速化できる:# https://tox.wiki/en/latest/config.html#python-runpackage = wheelwheel_build_env = .pkg改善 4: 並列実行
Section titled “改善 4: 並列実行”parallel-run コマンドを使うことで各環境を並列実行することができるので、さらに実行時間を短くすることができます。
TOX_OPTION: run-parallel --parallel-no-spinner