带有subprocess.call()的命令无法运行virtualenv

时间:2018-07-28 15:41:30

标签: python virtualenv

我正在尝试使用子进程中的call()运行名为env的virtualenv(之前创建),但是它不起作用。命令很好,当我直接在终端中键入命令时,它就可以工作。

python代码:

import subprocess
subprocess.call("source env/bin/activate", shell=True)

我也在尝试:

import os
os.system("source env/bin/activate")

为什么不执行命令或我应该使用什么来代替os.system()和subprocess.call()?

1 个答案:

答案 0 :(得分:1)

在两个示例中,您的代码都会启动一个子进程。该子进程具有自己的环境,它尝试运行“ source”命令,然后退出。由于子流程具有自己的环境,因此对当前流程没有影响。

假设最终目标是在子进程中运行其他命令,则应直接运行它。您不需要专门激活虚拟环境。

subprocess.call(["./env/bin/pip", "list"])

尽可能避免使用shell=True选项;如果您不十分小心,可能会非常危险。

如果确实需要设置activate脚本在此脚本中设置的环境变量,则需要在os.environ中手动设置它们。您可以阅读activate脚本来查看它们是什么。不过,它们通常无关紧要。