问题描述
以前,我是手动使用看起来像这样的Makefile:
Previously I was manually using a Makefile that looked something like this:
.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.但是感觉有点笨拙.
This had the nice side-effect that if I changed requirements_dev.txt or setup.py, it would rebuild my virtualenv. But feels a bit clunky.
我想用tox
做类似的事情.我知道tox
有一个--recreate
选项,但是我宁愿在需要时将其称为 .
I'd like to use tox
to do a similar thing. I understand tox
has a --recreate
option, but I'd rather call that only when I need to.
我的新设置如下:
# 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
标志.
An ideal solution would use just things in tox
, however an acceptable solution would involve the Makefile and the --recreate
flag.
推荐答案
在此问题中,tox似乎有一个未解决的问题.
There seems to be an open issue in tox for just this problem.
https://github.com/tox-dev/tox/issues/149 (单击并添加您的评论和投票,使作者知道该问题的普遍性)
https://github.com/tox-dev/tox/issues/149 (click and add your comment and vote, making the authors aware about how common the issue is)
我们需要提交补丁或解决它.想到的解决方法:
We'll need to either submit a patch or work around it. Workaround that come to mind:
- 直接在
tox.ini
中列出依赖项.使用您的构建系统来确保tox.ini与requirements.txt
保持同步. - 在您的Makefile中添加一条规则,该规则会在require.txt更改时执行tox --recreate命令.
- List dependencies directly in the
tox.ini
. Use your build system to ensure that the tox.ini stays in sync with therequirements.txt
. - Add a rule to your Makefile that does a tox --recreate whenever the requirements.txt changes.
解决方法2似乎最简单.
Workaround 2 seems most straightforward.
这篇关于当requirements.txt或setup.py更改时,用tox重新安装virtualenv的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!