14

以前は、次のような Makefile を手動で使用していました。

.PHONY: all
all: tests

.PHONY: tests
tests: py_env
    bash -c 'source py_env/bin/activate && py.test tests'

py_env: requirements_dev.txt setup.py
    rm -rf py_env
    virtualenv py_env
    bash -c 'source py_env/bin/activate && pip install -r requirements_dev.txt'

これには、requirements_dev.txt または setup.py を変更すると、virtualenv が再構築されるという素晴らしい副作用がありました。でもちょっとゴツい感じ。

私は同様のことをするために使用toxしたいと思います。オプションがあることは理解しtoxていますが、必要な場合にのみ--recreate呼び出したいと思います。

私の新しいセットアップは次のようなものです:

# Makefile
.PHONY: all
all: tests

.PHONY: tests
tests:
    tox

# tox.ini
[tox]
project = my_project
envlist = py26,py27

[testenv]
install_command = pip install --use-wheel {opts} {packages}
deps = -rrequirements_dev.txt
commands =
    py.test {posargs:tests}

理想的な解決策は にあるものだけを使用することですtoxが、受け入れ可能な解決策には Makefile と--recreateフラグが含まれます。

4

2 に答える 2

14

この問題だけについて、tox に未解決の問題があるようです。

https://github.com/tox-dev/tox/issues/149 (クリックしてコメントと投票を追加し、問題がどれほど一般的であるかを作成者に認識させます)

パッチを提出するか、それを回避する必要があります。頭に浮かぶ回避策:

  1. に依存関係を直接リストしtox.iniます。ビルド システムを使用して、tox.ini が .ini と同期していることを確認しますrequirements.txt
  2. requirements.txt が変更されるたびに tox --recreate を実行するルールを Makefile に追加します。

回避策 2 が最も簡単に思えます。

于 2014-04-12T17:04:56.220 に答える
6

最終的に行った Makefile の回避策は次のとおりです。

REBUILD_FLAG =

.PHONY: all
all: tests

.PHONY: tests
tests: .venv.touch
    tox $(REBUILD_FLAG)

.venv.touch: setup.py requirements.txt requirements_dev.txt
    $(eval REBUILD_FLAG := --recreate)
    touch .venv.touch

例:

$ make tests
touch .venv.touch
tox --recreate
[[ SNIP ]]
$ make tests
tox 
[[ SNIP ]]
$ touch requirements.txt
$ make tests
touch .venv.touch
tox --recreate
[[ SNIP ]]
于 2014-04-13T06:19:09.430 に答える