gpt4 book ai didi

python - 如何针对其他环境运行 tox -e myenv?

转载 作者:太空宇宙 更新时间:2023-11-04 01:58:45 25 4
gpt4 key购买 nike

是否可以在 tox 中让 tox -e hello 触发 hello 环境并在全局 envlist 上运行?

运行 tox 可以针对 py2 和 py3 正确运行。

运行 tox -e hello 只针对 py3 运行。

[tox]
skipsdist = True
envlist = py{27,37}

[testenv]
deps =
pytest
!py27: mock
commands =
{envpython} --version

; How to run this hello against the complete envlist?
[testenv:hello]
envlist = py{27,37}
commands =
echo hello

这似乎在某种程度上是预期的行为,但除了制作一堆 tox 文件之外,我不知道如何使用 tox 来解决问题:我想要 tox 有不同的命令入口点。例如,只针对 py27 运行单元测试,只针对 py{27,37} 运行单元测试,只针对 py27-{ 运行集成测试libA、libB

也许这只是一种反模式,您可以以这种方式对单个环境使用 tox -e,但它会破坏 envlist?

那我只需要制作另一个 tox.ini 吗?考虑到其他一切都与毒性有关的灵 active 和重用导向,这似乎非常笨拙。我觉得我错过了什么。

最佳答案

这里主要有两点需要理解:

  1. envlistglobal setting[tox]部分。在 [testenv:hello] 中定义它没有影响
  2. envlist定义或生成 env 的列表名字。这可以通过提供一个简单的逗号分隔列表来静态完成,或者 - 就像你所做的那样 - 根据通过特殊语法提供的因素组合生成列表 {...} . 两种 情况下的结果是一个环境名称列表,然后将在分隔的 virtualenvs 中执行。/venvs .

所以要说得很清楚:最后一个 envlistenv 的简单列表名字 - 没有别的。在 envs 中执行期间,正在对这些名称(或它们的部分(又名 因素))进行的操作.

如果您调用tox -e,所有这些环境都会执行.在您的示例中,您是 generating an envlist{<factorX>,<factorY>}基于与命令行 shell 提供的相同原理的语法。如果您在 tox 配置中请求生成的环境,结果将是:

$ tox -a

py27-hello
py37-hello
hello

这可能已经表明您的配置有点不对劲,因为我认为您不想要不合格的 hello环境

因此,您通过生成式创建 envlist 并静态提供 hello 来做什么testenv 使用 [testenv:hello]语法以一种不会产生您想要的结果的方式混合它们。

那么让我们调整您的 tox.ini摆脱不必要的静态定义 testenv:hello .我们也摆脱了本地envlist关键,因为它无论如何都没有效果。它没有抛出错误,因为在 envs 中任意命名了键被明确允许并且有时很有用。

[tox]
skipsdist = True
envlist = py{27,37}-hello

[testenv]
deps =
pytest
!py27: mock
# do not warn that echo is a command not in the venv
whitelist_externals = echo
commands =
{envpython} --version
hello: echo hello

确保 hello 命令仅在环境有 hello 时运行您可以使用的因素 <factor>[,<factor>]: <some command>指定如果 env 名称包含某个 factor 应该运行什么(由 - 分隔的名称部分)正在生成一个环境名称列表,然后用作正在执行的具体环境的信息。

如果我调用 tox -a再次在更改后的 ini 上我得到:

py27-hello
py37-hello

现在我可以通过调用例如请求完整的环境或仅请求因子tox -e py27-hello甚至 tox -e hello然后它将使用 basepython 并执行适合该因素的所有操作。

为了更深入地了解正在发生的事情,您可以显示所有环境的完全解析配置,看起来像这样:

$ tox --showconfig

[testenv:py27-hello]
envdir = /home/ob/do/play/.tox/py27-hello
setenv = SetenvDict: {'PYTHONHASHSEED': '1602746531', 'TOX_ENV_NAME': 'py27-hello', 'TOX_ENV_DIR': '/home/ob/do/play/.tox/py27-hello'}
basepython = python2.7
description =
envtmpdir = /home/ob/do/play/.tox/py27-hello/tmp
envlogdir = /home/ob/do/play/.tox/py27-hello/log
downloadcache = None
changedir = /home/ob/do/play
args_are_paths = True
skip_install = False
ignore_errors = False
recreate = False
passenv = {'TOX_REPORTER_TIMESTAMP', 'TOX_WORK_DIR', 'TMPDIR', 'TOX_PARALLEL_ENV', 'LANGUAGE', 'LANG', 'PATH', 'LD_LIBRARY_PATH', 'PIP_INDEX_URL'}
whitelist_externals = []
platform = .*
sitepackages = False
alwayscopy = False
pip_pre = False
usedevelop = False
install_command = ['python', '-m', 'pip', 'install', '{opts}', '{packages}']
list_dependencies_command = ['python', '-m', 'pip', 'freeze']
deps = [pytest]
commands = [['/home/ob/do/play/.tox/py27-hello/bin/python', '--version'], ['echo', 'hello']]
commands_pre = []
commands_post = []
ignore_outcome = False
extras = []
depends = ()
parallel_show_output = False
[testenv:py37-hello]
envdir = /home/ob/do/play/.tox/py37-hello
setenv = SetenvDict: {'PYTHONHASHSEED': '1602746531', 'TOX_ENV_NAME': 'py37-hello', 'TOX_ENV_DIR': '/home/ob/do/play/.tox/py37-hello'}
basepython = python3.7
description =
envtmpdir = /home/ob/do/play/.tox/py37-hello/tmp
envlogdir = /home/ob/do/play/.tox/py37-hello/log
downloadcache = None
changedir = /home/ob/do/play
args_are_paths = True
skip_install = False
ignore_errors = False
recreate = False
passenv = {'TOX_REPORTER_TIMESTAMP', 'TOX_WORK_DIR', 'TMPDIR', 'TOX_PARALLEL_ENV', 'LANGUAGE', 'LANG', 'PATH', 'LD_LIBRARY_PATH', 'PIP_INDEX_URL'}
whitelist_externals = []
platform = .*
sitepackages = False
alwayscopy = False
pip_pre = False
usedevelop = False
install_command = ['python', '-m', 'pip', 'install', '{opts}', '{packages}']
list_dependencies_command = ['python', '-m', 'pip', 'freeze']
deps = [pytest, mock]
commands = [['/home/ob/do/play/.tox/py37-hello/bin/python', '--version'], ['echo', 'hello']]
commands_pre = []
commands_post = []
ignore_outcome = False
extras = []
depends = ()
parallel_show_output = False
[testenv:hello]
envdir = /home/ob/do/play/.tox/hello
setenv = SetenvDict: {'PYTHONHASHSEED': '1602746531', 'TOX_ENV_NAME': 'hello', 'TOX_ENV_DIR': '/home/ob/do/play/.tox/hello'}
basepython = /usr/bin/python
description =
envtmpdir = /home/ob/do/play/.tox/hello/tmp
envlogdir = /home/ob/do/play/.tox/hello/log
downloadcache = None
changedir = /home/ob/do/play
args_are_paths = True
skip_install = False
ignore_errors = False
recreate = False
passenv = {'TOX_REPORTER_TIMESTAMP', 'TOX_WORK_DIR', 'TMPDIR', 'TOX_PARALLEL_ENV', 'LANGUAGE', 'LANG', 'PATH', 'LD_LIBRARY_PATH', 'PIP_INDEX_URL'}
whitelist_externals = []
platform = .*
sitepackages = False
alwayscopy = False
pip_pre = False
usedevelop = False
install_command = ['python', '-m', 'pip', 'install', '{opts}', '{packages}']
list_dependencies_command = ['python', '-m', 'pip', 'freeze']
deps = [pytest, mock]
commands = [['/home/ob/do/play/.tox/hello/bin/python', '--version'], ['echo', 'hello']]
commands_pre = []
commands_post = []
ignore_outcome = False
extras = []
depends = ()
parallel_show_output = False

关于python - 如何针对其他环境运行 tox -e myenv?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56195146/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com