思路:用Pyinstaller打包,但有一些坑,踩完坑后成功运行,写个踩坑指南分享下。
前提:已经在conda 环境下安装完可以运行的yolo5代码,例如你的虚拟python环境叫yolo5,主代码是XXX.py(这个python想转成.exe,例如推理代码)。
①首先进入激活环境
conda activate yolo5
pip install pyinstaller
②然后就可以使用pyinstaller 打包文件,-F是打包成一个总的XXX.exe包,使用-D为打包成文件夹XXX【包含一堆dll,XXX.exe】。这里使用-D,因为后面运行exe一般都会缺少dll,使用-D打包的话后续方便查看少哪些dll。具体操作:
cd到python路径下,
pyinstaller -D XXX.py
③踩坑,除错
打包完毕后进入命令行,运行该exe,会报错:缺少了caffe2_nvrtc.dll or one of its dependencies,检查XXX文件夹发现caffe2_nvrtc.dll 是存在的,因此是其他依赖dll缺失了。
那么使用Depends检查caffe2_nvrtc.dll,发现是这2个依赖dll缺失【kernel32.dll 和 nvrtc64_102_0.dll 】,原因是pyinstaller 少打包了kernel32.dll 和 nvrtc64_102_0.dll ,那么我们只要找到这两个dll,复制到XXX文件夹下面即可。
在虚拟环境yolo5的本地env文件夹下面【一般是C:\Users\用户名\.conda\envs\yolo5下】,可以找到nvrtc64_102_0.dll,复制。在C盘全局搜索kernel32.dll,可以找到,复制。
其他坑:根据参考②的思考,建议把XXX.python代码中的device 直接设置为 torch.device('cuda:0'),注释掉select_device函数,否则可能报其他错误,这个读者自行判断。
④成功运行exe文件来做yolo5的推理(如图,在cmd命令行中运行XXX.exe,后面带了个模型参数.pt【事先把该pt放到XXX文件夹内,或者你改为模型所在的绝对路径】):
参考①:
https://medium.com/@exexzxzpo/%E5%98%97%E8%A9%A6%E4%BD%BF%E7%94%A8pyinstaller%E6%89%93%E5%8C%85yolov5%E4%B8%ADdetect-py%E6%96%87%E4%BB%B6-%E5%90%ABpytorch%E6%A1%86%E6%9E%B6-%E6%89%80%E9%81%87%E5%88%B0%E7%9A%84%E5%95%8F%E9%A1%8C-543f5481b304
参考②:
【YOLOv5】YOLOv5打包成exe应用程序详细步骤_yolov5打包exe_嗷大喵~的博客-CSDN博客