我有一个命令,只能在我配置的Python虚拟环境中正常运行(按预期)。我知道我可以运行命令
$ cmd args
一旦我激活了venv,我就会这样做。但是(由于我使用的工具的限制)我需要在一行中激活run(和deactivate?):相当于运行的东西
$ activate_somehow cmd args
在命令行之外。
有办法做到这一点吗?
答案 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
是您的私人脚本的常用选项)的某处,并授予其可执行权限。