从python脚本激活虚拟环境



我正在尝试创建一个python脚本来自动化一些我个人的东西。在脚本中,我首先想激活我的虚拟环境,然后执行一些其他任务,(API调用和处理它们)。但是在script.py中,负责激活虚拟环境的命令不起作用。我试过了

import subprocess
subprocess.Popen(['D:/work/venv/scripts/activate'], shell=True) # Not Working
subprocess.run(['D:/work/venv/scripts/activate'], shell=True) # Not Working

但这并没有激活venv,我也试过了,但这似乎不工作

import os
os.system('D:/work/venv/scripts/activate') # Not Working

我也试过

activate_this = 'D:/Work/venv/scripts/activate_this.py' # Not working
with open(activate_this) as f:
code = compile(f.read(), activate_this, 'exec')
exec(code, dict(__file__=activate_this))

以上都不起作用在linux/ubuntu shell脚本完成的工作

source venv/bin/activate

我想要类似的东西,但使用python脚本,这将能够激活shell/cmd中的虚拟环境

看起来我链接的这个答案不适用于Python 3,但在那篇文章的答案评论中,我发现了来自@Calimo的以下内容:

activate_this_file = "/path/to/venv/bin/activate_this.py"
exec(compile(open(activate_this_file, "rb").read(), activate_this_file, 'exec'), dict(__file__=activate_this_file))
编辑:经过一番讨论,看起来真正的问题是使用subprocess而没有指定正确的环境。默认情况下,subprocess使用全局环境生成一个新进程。通过在调用subprocess时提供env参数来指定所需的虚拟环境,例如在使用上面的代码激活虚拟环境之后:
venv= os.environ.copy()
subprocess.check_all(["pip3", "install", "flask"], env=venv)

最新更新