如何最大程度地减少 tox 文件中的重复

How to minimize repetition in tox file

目标: 成功执行特定的 tox 命令,并运行 "just" 特定的匹配命令。

示例:tox -e py35-integration

tox 应该 运行 仅用于 py35 集成, 包括 default 或独立 py35定义。

我尝试了两种不同的方法,据我所知,这是两种方法来尝试做我想做的事情。

此外,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 运行 而不是 运行ning 为 py27 命令定义的内容。这不是正在发生的事情。相反,它将 运行 同时 py27py27-integration

第二种方法

[tox]
envlist = {py27,py35}, {py27,py35}-integration

[testenv]
commands =
    python -m testtools.run discover

[testenv:integration]
commands = 
    flake8 {posargs}

现在,我在这里明确隔离了一个 "sub" 环境,它有自己的命令 运行 for "integration"。

然而,不幸的是,我遇到了 "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}