PythonTox:如何在环境中使用不同的PythonEnvList
这是我的tox.ini:PythonTox:如何在环境中使用不同的PythonEnvList,python,tox,Python,Tox,这是我的tox.ini: [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 [t
[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
时,它在py27
和py35
中运行。我想要tox-e local
在不同的多个python环境中运行。我不知道该怎么做。我该怎么做?现在,它甚至不尊重初始环境列表,只在Python 2.7上运行。[tox]envlist
只是一个默认值-当调用tox
时,在没有选项-e
和TOXENV
环境变量的情况下运行的环境列表。一旦您使用了tox-e
[tox]envlist
将被忽略
您可以使用不同的python版本运行local
环境,但我不知道如何多次运行它。您必须明确列出所有环境:
tox -e py33-local,py34-local
您可以使用tox的约定缩短命令行:
tox -e 'py3{3,4}'-local
因此,您想要的是拥有两套不同的环境并独立运行它们 您首先需要了解的是,
envlist
是一个列表,其中列出了在不使用-e
选项的情况下调用tox时将运行的所有环境
接下来,您必须了解的是,每个tox.ini
中只有一个列表,而这个列表位于全局[tox]
部分
您必须了解的另一件事是pyXX因子(因子是由-
符号分隔的环境名称的一部分)对tox有特殊的意义,因为它们指示tox使用特定的解释器构建环境。它们也称为“默认环境”(请参阅)。如果您在调用tox时没有询问该因素,那么将使用basepython
解释器来构建virtualenv(从中调用tox的解释器)
因此,如果您使用类似您的tox.ini调用tox-e local
,它将使用basepython执行[tox:local]
中定义的内容,因为您没有定义应该使用哪个python来创建virtualenv,所以它使用与您调用tox时使用的相同的解释器
如果您希望能够与其他解释器一起调用本地因子,独立于其他环境,则可以从以下内容开始(在中描述):
检查创建的环境:
$ tox -a
py27-remote
py35-remote
py31-local
py36-local
带花括号符号的envlist所做的是通过组合所有因子及其排列来创建环境名称(这也可以有更多维度)
如果你说tox没有-e
,它们都会运行并使用正确的解释器
如果只想运行本地环境,则必须使用以下命令调用它:
$ tox -e py31-local,py36
那么只有这两个人会参加竞选。这里需要注意的是,如果您想要运行所有环境的子集,您必须要求使用它们的全名。没有“子代”或额外的环境列表魔法。只要在一个逗号分隔的列表中列出环境的全名,你就是金色的
更新
TIL了解到,实际上可以从命令行使用生成语法,因此可以键入:
$ tox -e 'py{31,36}'-local
谢谢你指出这一点。好的,我非常感谢并支持这里的其他两个答案,但我最终做的是不同的。仅仅实现一个单独的目标似乎很繁重 python版本和命令。
我最后做的只是制作一个单独的tox.ini并将其命名为
tox-c tox-local.ini
一个可能的解决方案是使用tox-l
列出所有环境,过滤所需的环境,然后将它们反馈到tox-e
例如,要运行名称中包含“local”的所有环境(使用bash):
tox-e$(tox-l | grep local | paste-sd“,”-)
逐步解释:
列出了所有环境,每行一个tox-l
仅过滤包含单词“local”的输入行grep local
将输入行与逗号连接起来paste-sd“,”-
- 使用
使用:
tox-l
对于您的“本地”案例,您可以通过以下方式之一调用tox:
tox-e py31本地版
tox-e py36本地版
tox-e'py3{1,6}'-本地
答案受的答案影响很大,但由于某种原因,我无法让它正常工作。最不疯狂的答案。其他一切都需要人工干预,因此违反了DRY(例如,通过或),这是疯狂的。相反,只需在
~/.zshrc
中将上述一行代码填充到shell脚本或shell别名中(例如,别名toxit='tox-e$(tox-l | grep local | paste-sd,“-)'
)。感受为您完成所有繁重工作的令人振奋的自动化自由。
$ tox -e 'py{31,36}'-local
[tox]
envlist = {py27,py31,py35,py36}-{default,local}
[testenv]
deps =
Flask
connexion
pytest
coverage
pytest-cov
requests
six
commands =
{default,local}: python --version
default: pytest --junitxml xunit-reports/xunit-result-XXX.xml --cov {envsitepackagesdir} --cov-report=xml
local: pytest --cov {envsitepackagesdir}/XXX --cov-report html