PyInstaller打包程序无法从宿主环境导入模块的技术咨询
环境配置
- Python 3.8
- Ubuntu 20.04.4 LTS
- PyInstaller 5.4.1(本地包)
- requests 2.28.1
问题与报错
我希望打包后的程序不内置requests模块,而是从宿主环境中导入,但运行打包程序时导入requests失败,报错信息如下:
File "/myuser/m/.local/lib/python3.8/site-packages/requests/compat.py", line 48, in <module> from http.cookies import Morsel File "<frozen importlib._bootstrap>", line 991, in _find_and_load File "<frozen importlib._bootstrap>", line 973, in _find_and_load_unlocked ModuleNotFoundError: No module named 'http.cookies'
我的脚本仅包含一行代码:
import requests
已执行的操作
- 使用
--exclude-module requests参数生成打包程序 - 在脚本中添加路径配置:
sys.path.append('/home/myuser/.local/lib/python3.8/site-packages')
执行后仍出现报错:
ModuleNotFoundError: No module named 'http.cookies'
我理解这是因为PyInstaller未扫描requests,因此无法识别其依赖的http.cookies模块。在脚本中手动添加import http.cookies后程序可正常运行,但仅添加sys.path.append('/usr/lib/python3.8')无法解决问题。
由于无法预测第三方模块的所有依赖,我想将宿主环境的所有目录添加到sys.path中,现存在以下疑问:
- 将宿主的所有目录添加到打包脚本的sys.path有什么问题?
- 为何程序能找到
/home/myuser/.local/lib/python3.8/site-packages下的requests,却找不到/usr/lib/python3.8下的http.cookies? - 一般情况下,如何像调试普通Python脚本一样调试PyInstaller打包后的程序?
内容的提问来源于stack exchange,提问作者leonidp
相关产品推荐
相关产品推荐

