首页 > 解决方案 > 使用子进程时如何留在虚拟环境中?

问题描述

我有一个在虚拟环境中运行的 python 脚本。我需要这段代码来调用另一个 python 脚本。为此,我使用subprocess.call(['python', 'python_script.py'])了 ,但是 python_script 卡在导入中,因为它在虚拟环境之外运行,并且某些模块仅在 venv 中可用。

我应该怎么做才能调用 subprocess 并留在 venv 中?

(顺便说一句,我现在正在使用 Windows,但我正在寻找一个跨平台的解决方案)

编辑:据我所知,我想要的行为是默认行为,我刚刚删除了虚拟环境并创建了新环境。令人惊讶的是,它奏效了。不过,仍然不知道旧 venv 发生了什么

标签: pythonsubprocesspython-venv

解决方案


如果我没记错的话,以下应该让你走上正轨:

import sys

subprocess.call([sys.executable, 'python_script.py'])

sys.executable将为您提供当前正在运行的 Python 解释器。这意味着如果您已经在虚拟环境中,子进程也将在虚拟环境中。

如果结果仍然不完全符合您的预期,您可能需要考虑转发一些环境变量(例如) VIRTUAL_ENVPATH尽管这不是必需的。

参考资料


推荐阅读