LoginSignup
23
18

More than 3 years have passed since last update.

tox設定ファイル チートシート

Last updated at Posted at 2020-01-12

概要

Pythonモジュールに対するCIで、勉強がてらtoxを導入してみたため、自分用に設定ファイルによく書きそうな内容をまとめて記述しておきます。
※toxバージョン>=3.14での内容となります。

toxとは

virtualenvを利用したMultiEnvironmentでのテストを実施することができるツールです。
複数バージョンのPythonでモジュールに対するテスト実施できる点が便利です。

設定ファイル種別

ドキュメントによると、3種類のファイルを次の優先順位で読み込みます。
1. pyproject.toml
2. tox.ini
3. setup.cfg

以下に記載していくのはtox.iniの内容となります。

埋め込み変数

各セクションで利用できる埋め込み変数の一覧です。

設定名 概要
{toxinidir} tox.iniの配置されているディレクトリ
{toxworkdir} 仮想環境が作成されるディレクトリ
{envname} 仮想環境名、[tox:{envname}]の部分で記載したもの
{envdir} 仮想環境ディレクトリ、デフォルトで{toxworkdir}/{envname}

globalセクション

共通設定を記載するセクションです。[tox]以下に記載します。

設定名 概要 デフォルト値
envlist 実行環境を羅列、コンマ区切りまたは改行して複数記述可能
基本的に記述
py37py38などデフォルトで用意されているものもある
-
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 pytestflake8などを設定
-
deps コマンド実行に必要な依存関係を指定
直接モジュールを指定するか、requirement.txtに記載して-rrequirements.txtで指定する
要はpip installのオプション部分
-
passenv 実行仮想環境に引き継ぎたい環境変数を指定
LANGPIP_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

Reference

23
18
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
23
18