首页 > 解决方案 > python子进程不继承虚拟环境

问题描述

在 W10 上使用 venv 操作时,如果从目录中的文件调用子进程,则子进程似乎无法访问 venv。有没有办法让它工作?

理想情况下,我希望该方法可以移植到 Linux,但我会采用使项目运行的任何方法。

这是我的测试:

如果我直接运行 sub_proc.py 它运行没有错误。

但是,如果我运行 main.py,我会在 uuid_shortener 的导入语句中看到错误。

主文件

import subprocess
import time

print(subprocess.Popen(['python', 'sub_proc.py']))
time.sleep(1)

sub_proc.py

import uuid_shortener

这是运行代码的输出。

(venv) PS C:\Users\...\popenvenv> python .\sub_proc.py

(上面没有错误)

(venv) PS C:\Users\...\popenvenv> python .\main.py
<Popen: returncode: None args: ['python', 'sub_proc.py']>
Traceback (most recent call last):
  File "C:\Users\...\popenvenv\sub_proc.py", line 1, in <module>
    import uuid_shortener
ModuleNotFoundError: No module named 'uuid_shortener'
(venv) PS C:\Users\...\popenvenv>

标签: python-3.xwindowssubprocess

解决方案


sys.executable代替'python'. _ sys.executable指您正在运行的可执行文件

这将保留对子进程中 virtualenv 的访问


推荐阅读