目标:成功执行特定的 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}
使用这种方法,这里的理解是我希望在不运行为 py27
命令定义的内容的情况下运行tox -e py27-integration
。这不是正在发生的事情。相反,它将同时运行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 管道具有期望某些名称结构的模板,并且这些名称也是 tox 的惯用语,例如,py27
被理解为安装 2.7 虚拟环境。
已更新
[tox]
minversion = 3.15
envlist = {py27,py35}, {py27,py35}-integration
[testenv]
commands =
python -m testtools.run discover
[testenv:py{27,35}-integration]
commands =
flake8 {posargs}