是否有单行方式在Python venv中运行命令?

时间:2018-01-09 18:33:17

标签: python command-line-interface virtualenv

我有一个命令,只能在我配置的Python虚拟环境中正常运行(按预期)。我知道我可以运行命令

$ cmd args
一旦我激活了venv,我就会这样做。但是(由于我使用的工具的限制)我需要在一行中激活run(和deactivate?):相当于运行的东西

$ activate_somehow cmd args

在命令行之外。

有办法做到这一点吗?

3 个答案:

答案 0 :(得分:4)

通常只需使用脚本的完全限定路径即可在虚拟环境中运行某些内容。例如,如果我有:

virtualenv .venv

然后我可以通过运行:

在没有激活它的情况下在虚拟环境中安装一些东西
.venv/bin/pip install foo

对于使用标准Python机制安装的任何内容都应如此。

答案 1 :(得分:2)

在查看生成的 bin/activate 脚本后,似乎唯一与 python 相关的是 VIRTUAL_ENV 变量,所以这应该足够了:

$ env VIRTUAL_ENV=path/to/venv python ...

请注意,目标环境的 bin 目录中的 python 可执行文件只是一个指向全局安装解释器的符号链接,它除了设置进程可执行路径之外没有任何其他作用。假设程序不使用它,使用主二进制文件本身似乎无害。如果您安装了一个包,然后安装了一些可执行文件,只需指定绝对路径:

$ env VIRTUAL_ENV=path/to/venv path/to/venv/bin/executable

答案 2 :(得分:-1)

您可以创建一个简单的包装器脚本,该脚本运行activate,执行您的命令,然后只需退出激活您的环境的脚本即可停用。

#!/bin/sh
. ${venv-./env}/bin/activate
"$@"

这使您可以将环境变量venv设置为要使用的环境的路径,或者如果未设置则使用./env。也许更好的设计是将env作为第一个参数传递:

#!/bin/sh
. "$1"/bin/activate
shift
"$@"

无论哪种方式,请将此保存在PATH$HOME/bin是您的私人脚本的常用选项)的某处,并授予其可执行权限。