pythontox:如何在环境中使用不同的python环境列表

2024-09-30 06:23:00 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的毒性试验公司名称:

[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

当我运行tox时,它在py27和{}中运行。我希望tox -e local在一组不同的多python环境中运行。我不知道怎么做。我该怎么做?现在它甚至不尊重最初的envlist,只在python2.7上运行。在


Tags: reporttoxpytestlocal公司xmlcovxunit
3条回答

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

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

tox -e py33-local,py34-local

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

^{pr2}$

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

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

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

分步讲解:

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

你想要的是两个不同的环境。在

首先要了解的是,envlist是一个列表,列出了如果不使用-e选项调用tox,将运行的所有环境。在

接下来你要了解的是,每个tox.ini只有一个列表,而这个列表在global[tox]部分中。在

另一件你必须理解的事情是pyXX factors(factors是由-符号分隔的环境名称的部分)对tox有特殊的含义,因为它们指示tox用一个特定的解释器构建一个环境。它们也被称为“默认环境”(参见basic usage)。如果您在调用tox时没有要求这个因子,那么basepython解释器将用于构建virtualenv(您从中调用tox的解释器)。在

因此,如果您使用毒性试验与您的一样,它将使用basepython执行[tox:local]中定义的内容,因为您没有定义应该使用哪个python来创建virtualenv,因此它使用的解释器与您调用tox时使用的相同。在

如果您希望能够使用其他解释器(独立于其他环境)调用本地因子,那么可以从以下几点开始(在v2 config docs中描述):

[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

检查创建的环境:

^{pr2}$

使用大括号表示法的envlist所做的,是通过将所有因素与其排列组合在一起来创建环境名称(这也可以有更多的维度)。在

如果您不使用-e说出tox,它们将全部运行并使用正确的解释器。在

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

$ tox -e py31-local,py36

那么只有那两个会跑。这里要做的是,如果您想运行所有环境的子集,您必须要求它们具有它们的全名。没有“子代”或额外的环境魔法。只需在逗号分隔的列表中列出环境的全名,你就是黄金。在

更新

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

$ tox -e 'py{31,36}'-local

谢谢你指出它。在

相关问题 更多 >

    热门问题