目标:成功执行特定的tox命令,并使该命令“仅”运行该特定的匹配命令。

示例:tox -e py35-integrationtox应该仅针对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。这不是正在发生的事情。相反,它将同时运行py27py27-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/

    10-08 23:47