使用子流程时如何留在虚拟环境中?

问题描述

我有一个在虚拟环境中运行的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_ENVPATH),尽管这不是必需的。

参考

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...