29

我在 setenv 中使用以下从我运行的地方导入环境变量,但是有没有办法导入所有变量,这样我就不需要一个一个地导入。

例如: {env:TEMPEST_CONFIG:} 和 {env:TEMPEST_CONFIG_DIR:} 用于导入这两个变量。

[testenv:nosetests]
setenv =
    TEMPEST_CONFIG={env:TEMPEST_CONFIG:}
    TEMPEST_CONFIG_DIR={env:TEMPEST_CONFIG_DIR:}
deps = {[testenv]deps}
commands =
    find . -type f -name "*.pyc" -delete
    bash {toxinidir}/tools/setup.sh
    nosetests --with-xunit {posargs}
4

1 回答 1

51

您可以使用passenv。如果您通过 catch all 通配符*,您可以访问父环境中的所有环境变量:

passenv=SPACE-SEPARATED-GLOBNAMES

2.0 版中的新功能。

执行测试命令时应从 tox 调用环境复制到测试环境的通配符环境变量名称列表。如果指定的环境变量在 tox 调用环境中不存在,则会被忽略。您可以使用 * 和 ? 将多个环境变量与一个名称匹配。

最少tox.ini复制(无需项目):

[tox]
skipsdist = True

[testenv]
passenv = *
skip_install = True
commands = python -c "print('computer says {env:MY_FANCY_ENV_VAR:}!')"

在 linux/unix shell 中调用:

MY_FANCY_ENV_VAR=no tox -qq

在 Windows cmd.exe 上调用:

set MY_FANCY_ENV_VAR=no & tox -qq

输出:

computer says no!
于 2015-08-27T14:51:19.063 回答