问题描述
我有一个在虚拟环境中运行的python脚本。我需要此代码来调用另一个python脚本。为此,我使用了subprocess.call(['python','python_script.py'])
,但是python_script停留在导入上,因为它在虚拟环境之外运行,并且某些模块仅在venv中可用。
该如何调用子进程并保留在venv中?
(顺便说一句,我现在正在使用Windows,但是我正在寻找一种跨平台的解决方案)
编辑: 当我了解到我想要的行为是默认行为时,我刚刚删除了虚拟环境并创建了新环境。令人惊讶的是,它起作用了。不过,仍然不知道旧venv发生了什么事情
解决方法
如果我没记错的话,以下内容将使您走上正确的轨道:
import sys
subprocess.call([sys.executable,'python_script.py'])
sys.executable
将为您提供当前正在运行的Python解释器。这意味着如果您已经在虚拟环境中,则子进程也将在虚拟环境中。
如果结果仍不完全符合您的预期,则可能会考虑转发一些环境变量显式信息(例如VIRTUAL_ENV
和PATH
),尽管这不是必需的。
参考 :