YOLO+ONNX+PyQt打包为exe踩坑记录
今天,分享一个博主做的小软件,能够实现实时姿态估计、目标检测,并录制音视频,效果如下:
最开始时,博主利用pytorch+pyqt
进行开发,使用pyinstaller
进行打包,由于包含的依赖包过多,生成的exe
文件达到了2.7G
,因此,果断采用onnxruntime
推理onnx
模型的方案。
踩坑记录
1.在打包过程中,博主发现如果python3.10
的版本在打包时会遇到onnxruntime
打包失败等一系列问题,因此博主使用的python
环境为3.8
,详细环境依赖如下:
Package Version
------------------------- ---------
altgraph 0.17.4
blinker 1.8.2
certifi 2025.6.15
charset-normalizer 3.4.2
click 8.1.8
colorama 0.4.6
coloredlogs 15.0.1
decorator 4.4.2
Flask 3.0.3
Flask-Cors 5.0.0
flatbuffers 25.2.10
humanfriendly 10.0
idna 3.10
imageio 2.35.1
imageio-ffmpeg 0.5.1
importlib_metadata 8.5.0
itsdangerous 2.2.0
Jinja2 3.1.6
MarkupSafe 2.1.5
moviepy 1.0.3
mpmath 1.3.0
numpy 1.24.4
onnxruntime 1.19.2
opencv-python 4.11.0.86
packaging 25.0
pefile 2023.2.7
pillow 10.4.0
pip 22.1.2
proglog 0.1.12
protobuf 5.29.5
PyAudio 0.2.14
pydub 0.25.1
pyinstaller 6.14.1
pyinstaller-hooks-contrib 2025.5
PyQt5 5.15.11
PyQt5-Qt5 5.15.2
PyQt5_sip 12.15.0
pyreadline3 3.5.4
pywin32-ctypes 0.2.3
requests 2.32.4
setuptools 70.3.0
some-package 0.1
sympy 1.13.3
tqdm 4.67.1
urllib3 2.2.3
websocket-client 1.8.0
websockets 13.1
Werkzeug 3.0.6
wheel 0.45.1
zipp 3.20.2
2.在将环境切换为3.8
后,基本便能够打包成功,但在运行exe
程序时,会报错:
缺少onnxruntime_providers_shared.dll依赖文件
此时,我们就需要在打包文件中添加了,找到我们打包时生成的spec
文件,然后在data
中添加进去所需要的依赖项(注意要根据自己的路径来配置),同时,还需要把我们的模型文件、图像文件也一并打包,如下:
# -*- mode: python ; coding: utf-8 -*-
a = Analysis(['main.py'],pathex=[],binaries=[],datas=[('D:\softwares\Anconda\envs\qianren\Lib\site-packages\onnxruntime\capi\onnxruntime_providers_shared.dll','onnxruntime\\capi'),('models/*.onnx','models'),('uploads','uploads'),('images','images')],hiddenimports=['onnxruntime'],hookspath=[],hooksconfig={},runtime_hooks=[],excludes=[],noarchive=False,optimize=0,
)
pyz = PYZ(a.pure)exe = EXE(pyz,a.scripts,[],exclude_binaries=True,name='main',debug=False,bootloader_ignore_signals=False,strip=False,upx=True,console=True,disable_windowed_traceback=False,argv_emulation=False,target_arch=None,codesign_identity=None,entitlements_file=None,
)
coll = COLLECT(exe,a.binaries,a.datas,strip=False,upx=True,upx_exclude=[],name='main',
)
完成这些后,运行打包命令:
pyinstaller main.spec
此时,基本就能够打包成功了。
生成的exe
文件就在dist
文件夹中。