Pyinstaller打包YOLOv11和PyQt5项目为exe文件
1. 准备干净的环境
否则会将无关的库部打包进去,导致 exe 文件动辄 1GB 以上甚至报错,建议创建一个干净的环境,只装必要的库。
2. 修改代码中的路径处理
打包后的程序在运行时,会解压到一个临时目录(sys._MEIPASS)。如果在代码里写死了 model = YOLO('weights/best.pt') 或者 icon = QIcon('img/logo.png'),打包后会报错“找不到文件”。
必须在你的Qt主代码(比如 main.py)中添加并使用这个函数:
1 | import sys |
3. 生成并修改 .spec 文件
不要直接用 pyinstaller -F main.py 一行命令,因为 YOLO 项目很复杂,直接命令行很难配置全。我们需要生成配置文件。
(1)在终端运行:
1 | pyinstaller --name=TrashApp --onedir --windowed main.py |
--name: exe的名字。--onedir: 生成一个文件夹(推荐)。虽然--onefile可以生成单个exe,但对于包含 PyTorch 的项目,单个 exe 启动极慢(因为每次都要解压几百兆文件),且容易报错。建议先用 onedir 跑通,最后再尝试 onefile。--windowed: 运行时不显示黑框控制台(如果还在调试阶段,建议先去掉这个参数,保留黑框看报错信息)。main.py: 你的入口脚本文件。
修改生成的
TrashDetect.spec文件:
运行上面命令后,目录下会多一个.spec文件。用记事本或 VSCode 打开它。我们需要做两件事:
- 把模型权重 (
best.pt) 和其他资源(图片、UI文件)加进去。 - 收集
ultralytics及其依赖的所有数据。
修改后的
.spec参考如下:- 把模型权重 (
1 | # -*- mode: python ; coding: utf-8 -*- |
4. 执行打包
在终端运行修改后的 spec 文件:
1 | pyinstaller TrashApp.spec |
等待进度条跑完。打包完成后,你会看到一个 dist 文件夹,里面有一个 TrashApp 文件夹。
5. 另外可以打包成单exe的格式
只有spec文件不同,创建spec文件,输入以下内容:
1 | # -*- mode: python ; coding: utf-8 -*- |
最后打包即可
1 | pyinstaller TrashApp.spec |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 5ha的个人空间!
评论




