2017-09-13 41 views
1

这里是我的tox.ini:蟒蛇TOX:如何在环境中使用不同的Python envlist

[tox] 
envlist = py27,py35 

[testenv] 
deps = 
    Flask 
    connexion 
    pytest 
    coverage 
    pytest-cov 
    requests 
    six 
commands=pytest --junitxml xunit-reports/xunit-result-XXX.xml --cov {envsitepackagesdir} --cov-report=xml 

[testenv:local] 
#HOW DO I SPECIFY A NEW LIST OF PYENV LIKE 31,36 IN HERE???? 
commands= 
    pytest --cov {envsitepackagesdir}/XXX --cov-report html 

当我运行tox它运行在py27py35。我想要tox -e local在不同的多个Python环境中运行。我无法弄清楚如何做到这一点。我该怎么做呢?现在它甚至不尊重初始环境列表,只运行在Python 2.7上。

回答

3

[tox]envlist只是一个默认值 - 当调用tox时没有选项-e且没有TOXENV环境变量时要运行的环境列表。一旦使用tox -e[tox]envlist将被忽略。

您可以使用不同的python版本运行local环境,但我不知道有多种方式来运行它多次。你必须列出所有的环境中明确:

tox -e py33-local,py34-local 

可以使用TOX”公约缩短命令行:

tox -e 'py3{3,4}'-local 
1

所以,你想要的是有两套不同的环境中独立运行它们。

您首先必须了解的是,envlist是如果在不使用-e选项的情况下调用tox时将运行的所有环境的列表。

接下来你必须明白的是,每个tox.ini只有一个这样的列表,其中一个在全球[tox]部分。

你要了解的另一件事是,pyXX因素(因素是由-号分隔环境名的部分)有TOX特殊的意义,因为他们指示其与特定构建环境翻译。它们也被称为“默认环境”(参见basic usage)。如果在调用tox时不要求这个因子,那么将使用basepython解释器来构建virtualenv(您从中调用tox的解释器)。

所以如果你调用tox -e local像你这样一个tox.ini,它将执行什么是[tox:local]与basepython定义的,因为你不是确定哪些蟒蛇应该用来创造的virtualenv,所以它使用相同的解释你用tox调用tox。

如果你希望能够与其他环境与其他翻译援引当地因素,独立,下面可以让你开始(在v2 config docs描述):

[tox] 
envlist = {py27,py35}-remote,{py31,py36}-local 

[testenv] 
deps = 
    Flask 
    connexion 
    pytest 
    coverage 
    pytest-cov 
    requests 
    six 

[testenv:remote] 
commands=pytest --junitxml xunit-reports/xunit-result-XXX.xml --cov {envsitepackagesdir} --cov-report=xml 

[testenv:local] 
commands= pytest --cov {envsitepackagesdir}/XXX --cov-report html 

检查其ENVS这创造搭配:

$ tox -a 

py27-remote 
py35-remote 
py31-local 
py36-local 

什么envlist用花括号符号呢,是与他们的排列结合所有因素(这可以有更多的尺寸也可以)创造环境名。

如果你说的tox没有-e,他们将全部运行并且全部使用正确的解释器。

如果你想运行本地ENVS只有你将不得不与调用它:

$ tox -e py31-local,py36 

那么只有他们两个会运行。这里要说的是,如果你想运行所有环境的一个子集,你必须要求他们的全名。没有“次世代”或额外的envlist魔法。只需在逗号分隔列表中列出envorenments的全名,您就是金牌。

UPDATE

TIL了解到,实际上你可以使用一代语法命令行,所以你可以键入:

$ tox -e 'py{31,36}'-local 

谢谢@phd指点出来。

0

好的,我非常感谢和upvoted在这里的另外两个答案,但我最终做的是不同的。实现单独的 python版本和命令似乎很麻烦。 我最终做的只是做一个单独的tox.ini,并将它称为tox -c tox-local.ini