目标:成功执行特定的tox命令,并使该命令“仅”运行该特定的匹配命令。
示例:tox -e py35-integration
tox
应该仅针对py35集成运行,并且不包括默认或独立的py35
定义。
我尝试了两种不同的方法,据我所知,这是尝试执行我要执行的操作的两种方法。
flake8
命令是为了轻松隔离不同的命令并向我指示正在运行的命令。这并不表示我实际上正在尝试运行该命令。 此外,ini文件仅显示相关部分。
第一种方法
[tox]
envlist = {py27,py35}, {py27,py35}-integration
[testenv]
commands =
py27: python -m testtools.run discover
py35: python -m testtools.run discover
py27-integration: flake8 {posargs}
py35-integration: flake8 {posargs}
通过这种方法,这里的理解是我希望在不运行
tox -e py27-integration
命令定义的内容的情况下运行py27
。这不是正在发生的事情。相反,它将同时运行py27
和py27-integration
。第二种方法
[tox]
envlist = {py27,py35}, {py27,py35}-integration
[testenv]
commands =
python -m testtools.run discover
[testenv:integration]
commands =
flake8 {posargs}
现在,在这里,我通过使用自己的命令为“集成”运行而明确隔离“子”环境。
但是,不幸的是,在执行“py27”的所有匹配模式时,我都遇到了完全相同的行为。
我试图避免重复testenv结构,例如:
[testenv:py27-integration]
和[testenv:py35-integration]
,它们包含完全相同的定义(目的是最大程度地减少重复)。我很想知道我是否有办法实现自己想做的事情。
我不想冒险做类似
p27-integration
这样的命名方案,因为我们的CI管 Prop 有期望某些名称结构的模板,并且这些名称也是tox的惯用语,例如py27
被理解为安装了2.7虚拟环境。 最佳答案
[tox]
envlist = {py27,py35}, {py27,py35}-integration
[testenv]
commands =
python -m testtools.run discover
[integration]
commands =
flake8 {posargs}
[testenv:py27-integration]
commands =
{[integration]commands}
[testenv:py35-integration]
commands =
{[integration]commands}
如果您需要更改集成命令,则可以在一个地方更改它们:
[integration]
。关于python - 如何减少Tox文件中的重复,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44849794/