1 opencv兼容性问题
1.1 现象
打包为一个exe完成后,在执行exe时,报错:
ImportError: ERROR: recursion is detected during loading of “cv2” binary extensions. Check OpenCV installation.
如下图所示:
1.2 原因及解决方式
pyinstaller和cv2版本存在兼容问题,卸载已有的opencv-python,安装opencv-python=4.5.3.56
本人安装的为python3.7,pyinstaller5.1,opencv版本高了.
可参见这里:https://blog.csdn.net/weixin_50850903/article/details/125231985
2 缺乏yolov5下的两个文件general.pyc和coco128.yaml
2.1 现象
打包为一个exe完成后,在执行exe时,报错:缺少general.pyc和coco128.yaml。如下图所示。
2.2 原因及解决方式
yolov5中应该是用到这两个,但是没包含。
(1)general.pyc为二进制文件,为general.py编译后的格式,在VSCode中,运行工程文件,python中运行general.py时,自动生成了这个pyc文件,这个文件位于文件夹下面。
但这里生成的是general.cpython-37.pyc,不是general.pyc,这也可能是找不到的原因。
将其进行重命名为general.pyc即可。
然后把他放在了utils下面。
(2)coco128.yaml为文本格式文件。工程中就有,在data\下面。直接用即可。
解决方法,在spec中包含这两个文件即可。
spec定义如下:
a = Analysis(['D:XXX\\detect.py'],
pathex=[],
binaries=[(r'D:\XXX\XX\utils\general.pyc', r'.\utils' ) #进行拷贝,注意拷贝的目的文件夹需要与上面缺少的路径一致。
],
datas=[(r'D:\XXX\data\coco128.yaml', r'.\data' )], #进行拷贝,注意拷贝的目的文件夹需要与上面缺少的路径一致。
hiddenimports=[],
hookspath=[],
hooksconfig={
},
runtime_hooks=[],
excludes=