我正在尝试创建一个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)