繁体   English   中英

从 python 脚本激活虚拟环境

[英]Activate virtual environment from a python script

我正在尝试创建一个 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 arg 来指定所需的虚拟环境,例如在使用上面的代码激活虚拟环境之后:

venv= os.environ.copy()
subprocess.check_all(["pip3", "install", "flask"], env=venv)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM