python tox:如何在环境中使用其他python envlist

Tom*_*mmy 5 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

[testenv:local]
#HOW DO I SPECIFY A NEW LIST OF PYENV LIKE 31,36 IN HERE????
commands=
    pytest --cov {envsitepackagesdir}/XXX  --cov-report html
Run Code Online (Sandbox Code Playgroud)

当我运行时,tox它在py27和中运行py35。我想tox -e local在一组不同的多个python环境中运行。我不知道该怎么做。我该怎么做呢?现在,它甚至不尊重初始环境列表,仅在Python 2.7上运行。

Oli*_*ter 9

所以你想要的是拥有两组不同的环境并独立运行它们。

您首先必须了解的是,envlist如果您在不带-e选项的情况下调用 tox,将会运行的所有环境的列表。

您必须了解的下一件事是,每个列表中只有一个,而该列表tox.ini位于全局[tox]部分。

您必须了解的另一件事是 pyXX 因子(因子是环境名称中由-符号分隔的部分)对 tox 具有特殊含义,因为它们指示它使用特定解释器构建环境。它们也称为“默认环境”(请参阅基本用法)。如果您在调用 tox 时不要求该因素,那么basepython解释器将用于构建 virtualenv(您从中调用 tox 的解释器)。

因此,如果您tox -e local使用像您这样的 tox.ini调用,它将执行[tox:local]在 basepython 中定义的内容,因为您没有定义应使用哪个 python 来创建 virtualenv,因此它使用与您调用 tox 相同的解释器。

如果您希望能够与其他解释器一起调用您的本地因素,独立于其他环境,以下内容可以帮助您入门(在v2 配置文档中进行了描述):

[tox]
envlist = {py27,py35}-remote,{py31,py36}-local

[testenv]
deps =
    Flask
    connexion
    pytest
    coverage
    pytest-cov
    requests
    six

[testenv:remote]
commands=pytest --junitxml xunit-reports/xunit-result-XXX.xml --cov {envsitepackagesdir} --cov-report=xml

[testenv:local]
commands= pytest --cov {envsitepackagesdir}/XXX --cov-report html
Run Code Online (Sandbox Code Playgroud)

检查这会创建哪些环境:

$ tox -a

py27-remote
py35-remote
py31-local
py36-local
Run Code Online (Sandbox Code Playgroud)

带有花括号符号的 envlist 所做的是通过将所有因素与其排列组合(这也可以有更多维度)来创建环境名称。

如果你说 tox 没有-e他们都会运行并且都使用正确的解释器。

如果您只想运行本地环境,则必须使用以下命令调用它:

$ tox -e py31-local,py36
Run Code Online (Sandbox Code Playgroud)

那么只有这两个会运行。这里需要注意的是,如果您想运行所有环境的一个子集,您必须使用它们的全名来询问它们。没有“子代”或额外的 envlist 魔法。只需在逗号分隔的列表中列出环境的全名,你就是金子。

更新

TIL 了解到您实际上可以从命令行使用生成语法,因此您可以键入:

$ tox -e 'py{31,36}'-local
Run Code Online (Sandbox Code Playgroud)

谢谢@phd指出。


phd*_*phd 5

[tox]envlist仅是默认值-在tox没有选项-e且没有TOXENV环境变量的情况下调用时要运行的环境的列表。一旦使用将tox -e [tox]envlist被忽略。

您可以local使用不同的python版本运行环境,但是我不知道有任何方法可以多次运行它。您必须明确列出所有环境:

tox -e py33-local,py34-local
Run Code Online (Sandbox Code Playgroud)

您可以使用tox的约定来缩短命令行:

tox -e 'py3{3,4}'-local
Run Code Online (Sandbox Code Playgroud)


bri*_*ssy 5

您尝试执行的操作的一个可能解决方案是使用tox -l列出所有环境,过滤您想要的环境,然后将它们反馈到tox -e.

例如,要运行名称中包含“local”的所有环境(使用 bash):

tox -e $(tox -l | grep local | paste -sd "," -)

分步说明:

  • tox -l 列出所有环境,每行一个
  • grep local 仅过滤包含单词“local”的输入行
  • paste -sd "," - 用逗号连接输入行