LoginSignup
1
0

More than 3 years have passed since last update.

AnacondaとVirtualenvでサクッとtoxを動かす

Posted at

はじめに

toxを使ってサクッと複数バージョンのPythonでテストを回します。
Anacondaとvirtualenvを使ってサクッとtoxが動く環境を作ります。

そしてたぶん、この手順がもっとも簡単にWindowsでtoxを使う方法かと思います。

手順

Anacondaをインストールする

手順は省略。

Python3.7をインストール

Anacondaをrootにvirtualenvをインストールする

Anacondaをインストールしたら conda コマンドが使えるのでAnacondaをroot環境にvirtualenvを入れます。

ポイントとしては conda コマンドでインストールすることです。
どうやら pip ではうまくいきません。


$ conda install virtualenv

toxをインストール

toxをインストールします。

(py37)$ pip install tox

tox.iniを書く

toxの定義は tox.ini というファイルで記載します。

とりあえずこんな感じで作ってみます。

tox.ini

[tox]
envlist =
    py{36,37}
skip_missing_interpreters = true

[testenv]
description = Unit Test and Integration Test with coverages
passenv = LANG
deps =
    pytest
    pytest-cov
    pytest-pythonpath
    flake8
    pep8
    pyflakes
    pytest-flake8
    pytest-pep8
    coverage
    black
commands =
    python setup.py install
    coverage run --source=hogehoge -m pytest --junit-xml=test_results.xml
    coverage report -m
    coverage html
    coverage xml
    black hogehoge setup.py --check
  1. envlist にテストしたいPythonのバージョンを記載します。ここでは、3.7と3.6をテストする環境として定義してます。動きとしては
  2. skip_missing_interpreters を有効にしておけば、指定したインタープリターに該当バージョンの仮想環境がない場合にもテストケースをスキップするだけでエラーとして扱わなくなります。CIとかに乗っけると手元の仮想環境と異なることが間々あるので結構便利だったりします。
  3. [testenv]deps でテストランナーが必要とするライブラリをインストールします。今回は pytest をテストランナー、カバレッジレポートはcoverage で、コードのフォーマットチェックは black で行ってます。
  4. commands にテストのコマンドを記載すれば上から順番に実行します。 DBの用意など事前準備が必要だったり、後処理が必要な場合はそれぞれ commands_pre commands_post コマンドが用意されてますが、今回は使いません。
  5. tox.iniの詳しい解説は公式ドキュメントを見てください。

ちなみにpytest自体の設定は setup.cfg に記載してます。 pep8flake8 の設定もここでしてます。

setup.cfg
[tool:pytest]
addopts = -v -ra --pep8 --showlocals
log_cli = false
log_level = INFO
log_file_level = INFO
timeout = 5
python_paths = ./hogehoge ./hogehoge/utils
pep8ignore =
    E501
    tests/*.py ALL

[flake8]
max-line-length = 120
doctests = True
exclude =
    .git
    .eggs
    __pycache__
    tests/*.py
    docs/
    build/
    dist/

toxで回すPythonのバージョンをあらかじめ用意する

このままでもtoxはうごきますが、Windowsでtoxを動かしたインタープリターのPythonバージョン以外の仮想環境が用意できず下記のようなエラーを吐いてしまいます。

GLOB sdist-make: /tmp/pyac/setup.py
py36 create: /tmp/pyac/.tox/py36
ERROR: InterpreterNotFound: python3.6
__________________________ summary ___________________________
ERROR:   py36: InterpreterNotFound: python3.6

どうやら py36 が Python3.6を使って仮想環境を作れってことがWindowsさんはわからないらしい。。。

下記のように tox が発見するパスに仮想環境を作る必要があるらしいです。

$ conda create -p C:\Python36 python=3.6

ほかにも、たとえばPython2.7の場合は

$ conda create -p C:\Python27 python=2.7

といった具合です。

toxする

toxするときは

$ tox

でOK。

ためしにtoxしたい人はtox.iniを書いた私のごみソースをcloneして手元で動かしてみましょう。

ebook-homebrew

参考

Willem's Fizzy Logic—How to setup tox on Windows with Anaconda

tox公式Doc

1
0
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
1
0