在 virtualenv 中安装依赖项后 运行 命令的推荐方法
Recommended way to run commands after installing dependencies in the virtualenv
我想在需要额外设置的项目上使用 tox 到 运行 py.test除了将软件包安装到 virtualenv 中。创建 virtualenv 并安装依赖项后,一些命令需要 运行.
具体来说,我说的是使用 nodeenv:
设置 node 和 npm 环境
nodeenv --prebuilt -p
我看到 tox 允许我通过在 tox.ini
中设置 install_command
来提供用于安装依赖项的自定义命令。但我不认为这是我想要的,因为 替换了 用于安装依赖项的命令(我假设 pip
)。
我考虑过使用具有 session 范围的 py.test fixture 来处理 nodeenv 的设置,但这对我来说似乎很老套,因为我不希望这种情况发生py.test 是直接 运行,而不是通过 tox。
实现此目标最简单的方法是什么?
在 commands 中创建 virtualenv 和依赖安装后,您可以进行所有必要的设置。是的,它显示 "the commands to be called for testing.",但如果您需要做额外的工作来准备测试,您可以直接在此处完成。
无论你按给定的顺序扔给它什么,它都会起作用——例如:
[testenv:someenv]
deps =
nodeenv
pytest
flexmock
commands =
nodeenv --prebuilt -p
; ... and whatever else you might need to do
py.test path/to/my/tests
如果你有 commands/scripts 或任何其他产生正确结果的东西,但它 returns 一个非零退出状态,你可以通过在 -
前面加上忽略它(如 - naughty-command
).
如果您需要执行更多步骤,您可以将它们包装在一个小 (Python) 脚本中,然后按照 .
中所述调用该脚本
添加使用多个安装命令的能力也存在问题:https://github.com/tox-dev/tox/issues/715 已实现。
我遇到了同样的问题,因为能够在不调用测试的情况下创建环境(通过 --notest
)对我来说很重要,所以我希望安装在安装阶段进行,而不是运行 阶段,所以我做了一些稍微不同的事情。首先,我创建了一个 create-env
脚本:
#!/usr/bin/env sh
set -e
pip install $@
nodeenv --prebuilt --python-virtualenv --node=8.2.1
使其可执行,然后在 tox.ini:
[tox]
skipsdist = True
[testenv]
install_command = ./create-env {opts} {packages}
deps = nodeenv
commands = node --version
此完整示例 运行s 并输出以下内容:
$ tox
python create: .../.tox/python
python installdeps: nodeenv
python installed: nodeenv==1.3.0
python runtests: PYTHONHASHSEED='1150209523'
python runtests: commands[0] | node --version
v8.2.1
_____________________________________________________________________ summary ______________________________________________________________________
python: commands succeeded
congratulations :)
这种方法的缺点是它只能在 Unix 上工作。
在tox 715中,我提出了本机支持多个安装命令的可能性。
我想在需要额外设置的项目上使用 tox 到 运行 py.test除了将软件包安装到 virtualenv 中。创建 virtualenv 并安装依赖项后,一些命令需要 运行.
具体来说,我说的是使用 nodeenv:
设置 node 和 npm 环境nodeenv --prebuilt -p
我看到 tox 允许我通过在 tox.ini
中设置 install_command
来提供用于安装依赖项的自定义命令。但我不认为这是我想要的,因为 替换了 用于安装依赖项的命令(我假设 pip
)。
我考虑过使用具有 session 范围的 py.test fixture 来处理 nodeenv 的设置,但这对我来说似乎很老套,因为我不希望这种情况发生py.test 是直接 运行,而不是通过 tox。
实现此目标最简单的方法是什么?
在 commands 中创建 virtualenv 和依赖安装后,您可以进行所有必要的设置。是的,它显示 "the commands to be called for testing.",但如果您需要做额外的工作来准备测试,您可以直接在此处完成。
无论你按给定的顺序扔给它什么,它都会起作用——例如:
[testenv:someenv]
deps =
nodeenv
pytest
flexmock
commands =
nodeenv --prebuilt -p
; ... and whatever else you might need to do
py.test path/to/my/tests
如果你有 commands/scripts 或任何其他产生正确结果的东西,但它 returns 一个非零退出状态,你可以通过在 -
前面加上忽略它(如 - naughty-command
).
如果您需要执行更多步骤,您可以将它们包装在一个小 (Python) 脚本中,然后按照
添加使用多个安装命令的能力也存在问题:https://github.com/tox-dev/tox/issues/715 已实现。
我遇到了同样的问题,因为能够在不调用测试的情况下创建环境(通过 --notest
)对我来说很重要,所以我希望安装在安装阶段进行,而不是运行 阶段,所以我做了一些稍微不同的事情。首先,我创建了一个 create-env
脚本:
#!/usr/bin/env sh
set -e
pip install $@
nodeenv --prebuilt --python-virtualenv --node=8.2.1
使其可执行,然后在 tox.ini:
[tox]
skipsdist = True
[testenv]
install_command = ./create-env {opts} {packages}
deps = nodeenv
commands = node --version
此完整示例 运行s 并输出以下内容:
$ tox
python create: .../.tox/python
python installdeps: nodeenv
python installed: nodeenv==1.3.0
python runtests: PYTHONHASHSEED='1150209523'
python runtests: commands[0] | node --version
v8.2.1
_____________________________________________________________________ summary ______________________________________________________________________
python: commands succeeded
congratulations :)
这种方法的缺点是它只能在 Unix 上工作。
在tox 715中,我提出了本机支持多个安装命令的可能性。