如何在tox创建的虚拟环境中运行python脚本而不在tox.ini中指定它们?

时间:2015-12-10 13:08:57

标签: shell python-3.x tox

我试图通过shell中的tox命令在tox.ini部分下的[testenv] commands =文件中运行指定的python命令。我想在将它们放入tox.ini之前验证输出命令。

是否可以通过将它们作为一些参数传递来从tox commndline运行python命令? 像

这样的东西
tox -e <env_to_run_script_in> <command_which_we_want_to_run_in_specified_env>

有没有办法将tox.ini中的命令作为命令行参数传递给shell上的tox?

我尝试过以下但没有一个有效。

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

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

2 个答案:

答案 0 :(得分:4)

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

使用tox.ini之类的

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

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

当没有参数调用tox时,它默认运行py.test,否则命令行传递的args将被发送到指定的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中安装了我的包。

答案 1 :(得分:0)

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

我想我可以使用像func2这样的工具来帮助解决这个问题,但是因为我的virtualenvwrapper目录已经有了一个具有正确依赖关系的virtualenv - 事实上我确实是依赖关系的一组我试图调试 - 它似乎是最好的合作场所。

为了使这更容易,我创建了一个小shell脚本,用于在tox virtualenv中运行任意命令(甚至是shell!)。我称它为毒素&#34;。来源位于this gist - 它并不是特别复杂,但希望有人发现它很有用。