【问题标题】:How to run custom command with tox without specifying it in tox.ini?如何使用 tox 运行自定义命令而不在 tox.ini 中指定它?
【发布时间】:2015-12-10 13:08:57
【问题描述】:

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

是否可以通过将自定义命令作为 shell 参数传递给tox?类似的东西

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 中?

【问题讨论】:

    标签: shell python-3.x tox


    【解决方案1】:

    通过在命令说明符中使用带有默认参数的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 使用参数 python hello.py 启动 pypy virtualenv

    输出:

    /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 调用 ipython shell,并将我的包安装在 virtualenv 中。

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-20
        相关资源
        最近更新 更多