Windows 10下Python 3.x虚拟环境中subprocess.Popen为何调用全局Python可执行文件
Windows 10 虚拟环境 subprocess 调用Python路径异常问题
以下是在Windows 10系统的Python 3.x虚拟环境中运行的脚本:
#!/usr/bin/env python import sys, os, subprocess print(sys.executable) args = ["python", "-c", "import sys; print(sys.executable)"] p = subprocess.Popen(args, stdout=None, env=os.environ) p.wait()
在大多数系统中,两次调用print(sys.executable)会返回虚拟环境内python.exe的路径,运行输出示例如下:
C:> python test.py C:\venv\Scripts\python.exe C:\venv\Scripts\python.exe
但部分机器会出现路径不一致的异常表现:第一次调用返回虚拟环境的python.exe路径,第二次调用却指向系统全局安装的python.exe,输出示例如下:
C:> python test.py C:\venv\Scripts\python.exe C:\Users\me\AppData\Local\Programs\Python\Python38\python.exe
上述代码为简化后的测试版本,便于复现问题。实际业务场景中使用subprocess.Popen调用其他Python脚本时,会因为全局环境未安装虚拟环境对应的依赖包,出现模块导入失败问题。
已完成的排查操作:
- 曾怀疑是PATH环境变量配置问题,但在
subprocess.Popen调用前后打印PATH内容完全一致,两种场景下虚拟环境的venv/Scripts文件夹路径都排在全局Python安装路径之前 - 尝试删除并重建虚拟环境,问题依旧复现
内容的提问来源于stack exchange,提问作者Craig
相关产品推荐
相关产品推荐

