PyInstaller打包.py为.exe运行时提示cv2递归加载错误如何解决
PyInstaller打包OpenCV程序触发cv2递归加载报错修复方案
这个报错是PyInstaller收集cv2二进制依赖时出现循环扫描触发的递归保护,按以下优先级操作即可修复:
方案1:通过spec文件调整递归深度(成功率最高)
- 先在项目目录执行你原本的打包命令:
pyinstaller main.py --onefile -w,执行完成后目录下会生成main.spec配置文件,之前生成的报错exe可以直接删掉。 - 用文本编辑器打开
main.spec,在文件最顶部添加两行代码,把Python默认递归深度调高,避免扫描依赖时触发阈值:import sys sys.setrecursionlimit(10000) - 在spec文件中找到
hiddenimports=[]这一行,把括号里的内容改成['cv2'],也就是写成hiddenimports=['cv2'] - 保存spec文件后,不要用原来的py文件直打命令,执行基于spec文件的打包命令:
pyinstaller main.spec - 打包完成后到
dist目录下取生成的exe,运行就不会再报递归错误。
方案2:直接给打包命令加依赖收集参数
如果不想改spec文件,直接在原打包命令上追加cv2的全量收集和隐式导入参数,用下面的命令直接打包即可:
pyinstaller main.py --onefile -w --hidden-import cv2 --collect-all cv2
前置冲突排查(以上方案都无效时操作)
如果按上面两个方法操作后还是报错,先排查OpenCV安装冲突:
- 执行命令卸载环境里所有版本的OpenCV相关包:
pip uninstall opencv-python opencv-contrib-python opencv-python-headless -y - 重装稳定版OpenCV,不要装alpha/beta测试版:
pip install opencv-python==4.9.0.80 - 重装完成后再走上面的打包流程即可。
提示:不要在虚拟环境和全局环境同时装多个版本的OpenCV,多版本共存是触发这类依赖扫描错误的常见原因。
内容的提问来源于stack exchange,提问作者bix
相关产品推荐
相关产品推荐

