python-3.x - python子进程不继承虚拟环境
问题描述
在 W10 上使用 venv 操作时,如果从目录中的文件调用子进程,则子进程似乎无法访问 venv。有没有办法让它工作?
理想情况下,我希望该方法可以移植到 Linux,但我会采用使项目运行的任何方法。
这是我的测试:
- main.py 使用 Popen 调用 sub_proc.py。
- sub_proc.py 导入 uuid_shortener,已安装在虚拟环境中。
如果我直接运行 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>
解决方案
sys.executable
代替'python'
. _ sys.executable
指您正在运行的可执行文件
这将保留对子进程中 virtualenv 的访问
推荐阅读
- php - 将所有类型的 BBCODE 图片链接替换为 HTML 图片链接
- node.js - 使用服务器端渲染从同一端口托管两个单独的角度 - Angular Universal
- r - 无法从源代码安装 R 包 - 路径中的特殊字符
- php - PHP基于键重新排序数组
- javascript - Firebase Orderby 的格式不正确
- ios - 储物套装
到用户默认值 - laravel - 调用未定义的函数 App\Http\Controllers\Post()
- python - numpy 比 numba 和 cython 快,如何改进 numba 代码
- python - Python:扫描网站的所有站点以获取特定 URL
- c# - 如何获取动作参数是 FromServices 或 FromBody 或其他