概要
Pythonモジュールに対するCIで、勉強がてらtoxを導入してみたため、自分用に設定ファイルによく書きそうな内容をまとめて記述しておきます。
※toxバージョン>=3.14
での内容となります。
toxとは
virtualenv
を利用したMultiEnvironmentでのテストを実施することができるツールです。
複数バージョンのPythonでモジュールに対するテスト実施できる点が便利です。
設定ファイル種別
ドキュメントによると、3種類のファイルを次の優先順位で読み込みます。
- pyproject.toml
- tox.ini
- setup.cfg
以下に記載していくのはtox.ini
の内容となります。
埋め込み変数
各セクションで利用できる埋め込み変数の一覧です。
設定名 | 概要 |
---|---|
{toxinidir} |
tox.ini の配置されているディレクトリ |
{toxworkdir} | 仮想環境が作成されるディレクトリ |
{envname} | 仮想環境名、[tox:{envname}] の部分で記載したもの |
{envdir} | 仮想環境ディレクトリ、デフォルトで{toxworkdir}/{envname}
|
globalセクション
共通設定を記載するセクションです。[tox]
以下に記載します。
設定名 | 概要 | デフォルト値 |
---|---|---|
envlist | 実行環境を羅列、コンマ区切りまたは改行して複数記述可能 基本的に記述 py37``py38 などデフォルトで用意されているものもある |
- |
toxworkdir | 仮想環境が作成されるディレクトリ toxによって作成されたファイル等はこのディレクトリに格納される |
{toxinidir}/.tox |
skipsdist | 結果をパッケージ化するかtrue でスキップする |
false |
skip_missing_interpreters | interpreter関係で失敗した場合のリターンコードを設定true で失敗した場合も成功したとみなしたコードを返却、config は設定ファイルから読み込む |
config |
example
tox.ini
[tox]
envlist =
py38, py37
flake8
isort
skipsdist = true
skip_missing_interpreters = true
envセクション
globalセクションのenvlistに記載した各環境の詳細を記載するセクションです。[tox:{envname}]
以下に記載します。
設定名 | 概要 | デフォルト値 |
---|---|---|
commands |
必須 現在の環境で実行するコマンド内容 coverage run -p -m pytest やflake8 などを設定 |
- |
deps | コマンド実行に必要な依存関係を指定 直接モジュールを指定するか、requirement.txtに記載して -rrequirements.txt で指定する要は pip install のオプション部分 |
- |
passenv | 実行仮想環境に引き継ぎたい環境変数を指定LANG``PIP_INDEX_URL などを設定可 |
- |
setenv | 実行仮想環境に新たに環境変数を設定 | - |
whitelist_externals | 実行仮想環境側には用意されていないが、ローカル環境のコマンドで問題なく、これを使いたい場合に指定する | - |
alwayscopy | Pythonファイルへのシンボリックリンクではいやだという場合にtrue 指定 |
false |
changedir | コマンド実行時のワーキングディレクトリを指定 | {toxinidir} |
envlogdir | ログファイル置き場を設定 | {envdir}/log |
description | 簡単な説明文をかける toxでの環境表示コマンド実行時にverboseを指定していると内容が表示される |
no description |
example
tox.ini
[tox]
envlist =
py38
flake8
skipsdist = true
# py38環境の詳細
[testenv]
passenv = LANG
deps = -rrequirements.txt
passenv = PYTHONPATH
setenv =
PYTHONDONTWRITEBYTECODE=1
changedir = tests
commands =
coverage run -p -m pytest
# flake8環境の詳細
[testenv:flake8]
skip_install = true
deps =
flake8 >= 3.7
flake8-import-order
changedir = {toxinidir}
description = 'check pep8 style'
commands = flake8 module
pytestやflake8自体の設定はsetup.cfg
に記載します。
setup.cfg
[tool:pytest]
testpaths = tests
[coverage:run]
branch = True
source =
module
tests
[flake8]
exclude = build,.git/*,.tox/*,./tests/*
ignore =
# allow Multiple spaces before Operator
E221
max-line-length = 140