我试图通过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中?
答案 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
输出:
/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 - 它并不是特别复杂,但希望有人发现它很有用。