6

我正在尝试在将命令放入 tox.ini[testenv] commands =部分之前验证命令。

是否可以通过将自定义命令tox作为 shell 参数传递来传递?就像是

tox -e <env_to_run_script_in> <command_which_we_want_to_run_in_specified_env>

我尝试了以下方法,但它们都不起作用。

tox -e py34 args py.test
tox -e py34 -- py.test
tox args "py.test"

如何在 tox 创建的虚拟环境中运行 python 命令/脚本而不将它们放在 tox.ini 中?

4

2 回答 2

7

通过posargs在命令说明符中使用默认参数,可以将任意命令行传递到底层的 virtualenv 环境,同时在没有传递任何参数时仍然运行测试。

使用点tox.ini

[tox]
envlist = py27,py35,pypy,pypy3

[testenv]
passenv =
    TERM
deps=
    pytest
    ipython
    six
commands={posargs:py.test}

当不带参数调用 tox 时,它默认运行,py.test否则在命令行上传递的参数将发送到指定的 virtualenv。

hello.py在项目的根目录中使用示例

import os
import sys
print(os.__file__)
print(sys.version)
print("Hello from env")

通过调用tox -e pypy python hello.py

tox -e pypy使用参数启动 pypy virtualenvpython hello.py

输出:

/Users/seanjensengrey/temp/.tox/pypy/lib-python/2.7/os.pyc
2.7.10 (5f8302b8bf9f53056e40426f10c72151564e5b19, Jan 20 2016, 04:41:02)
[PyPy 4.0.1 with GCC 4.2.1 Compatible Apple LLVM 7.0.2 (clang-700.1.81)]
Hello from env

我使用TERM="xterm-256color" tox -e pypy ipython安装在 virtualenv 中的包来调用 ipython shell。

于 2016-02-09T08:42:18.840 回答
0

我发现自己也有同样的问题。在尝试调试仅在特定解释器或环境下失败的单元测试时,这通常是一个问题。

我想我可以使用类似的工具virtualenvwrapper来帮助解决这个问题,但由于我的.tox目录已经有一个具有正确依赖项的 virtualenv——实际上是我试图调试的确切依赖项集——它似乎是最好的地方一起工作。

为了使这更容易,我创建了一个小 shell 脚本,用于在 tox virtualenv 中运行任意命令(甚至是 shell!)。我称之为“毒素”。来源在这个要点中——它不是特别复杂,但希望有人发现它有用。

注意:请不要代码复制到此答案中。这具有将其重新许可为 CC-BY-SA 的效果。

于 2018-04-03T16:10:21.763 回答