在 tox 部分自动选择平台(或其他)条件
问题描述
我想专门运行某个 tox 部分,然后在特定平台上自动决定.如果我只运行 tox -e ALL
,下面的示例代码片段可以正常工作.然后平台条件很好地划分出正确的平台.
I want to specifically run a certain tox section which then auto-decides on the specific platform.
The example code-snippet below works fine if I just ran tox -e ALL
. Then the platform condition nicely sects out the correct platform.
但是,我想仅处理并运行特定部分,例如 tox -e other
(而不是 tox -e other-win,other-linux
) 然后让 tox
自动选择相应的平台(或任何其他)条件.
However, I want to only adress and run a specific section like for instance something like tox -e other
(not tox -e other-win, other-linux
) and then have tox
auto-chosing the corresponding platform (or any other) condition.
我不知道这种在 tox
中设置条件的方式是不是不可能,还是我遗漏了什么.
I don't know if this way of setting up conditions in tox
is not possible, or if I'm missing something.
[tox]
skipsdist = true
[testenv:systest-{win, linux}]
platform =
linux: linux
win: win|msys
whitelist_externals =
win: cmd
linux: sh
commands =
win: cmd /r echo {env:OS}
linux: sh -c echo {env:OS}
[testenv:other-{win, linux}]
platform =
linux: linux
win: win|msys
whitelist_externals =
win: cmd
linux: sh
commands =
win: cmd /r echo {env:OS}
linux: sh -c echo {env:OS}
解决方案
你可以给 tox-factor
插件试一试.
You could give the tox-factor
plugin a try.
例如:
tox.ini
[tox]
envlist =
alpha-{redmond,tux}
bravo-{redmond,tux}
requires =
tox-factor
skipsdist = true
[testenv]
commands =
python -c 'import sys; print("platform", sys.platform)'
platform =
redmond: win32
tux: linux
这给出了以下四种环境:
This gives the following four environments:
$ tox --listenvs
alpha-redmond
alpha-tux
bravo-redmond
bravo-tux
可以根据因素来选择:
$ tox --listenvs --factor tux
alpha-tux
bravo-tux
$ tox --listenvs --factor alpha
alpha-redmond
alpha-tux
然后像这样运行(例如在 Linux 平台上):
And then run like this (for example on a Linux platform):
$ tox --factor bravo
bravo-tux run-test-pre: PYTHONHASHSEED='1770792708'
bravo-tux run-test: commands[0] | python -c 'import sys; print("platform", sys.platform)'
platform linux
________________________________________________ summary ________________________________________________
SKIPPED: bravo-redmond: platform mismatch ('linux' does not match 'win32')
bravo-tux: commands succeeded
congratulations :)
参考文献:
- https://github.com/tox-dev/tox/issues/1338
- https://pypi.org/project/tox-factor/李>
相关文章