PyInstaller打包Yolov5自定义模型exe报错:找不到default.yaml求解
解决PyInstaller打包Yolov5自定义模型exe找不到default.yaml的问题
方法1:显式指定配置文件路径
- 放弃依赖库的默认路径,在代码中直接指定自定义yaml的绝对路径,打包时将yaml文件一同纳入:
- 修改模型加载代码,示例如下(替换原有加载逻辑):
import os # 获取当前运行路径(打包后为exe所在目录) current_dir = os.path.dirname(os.path.abspath(__file__)) # 拼接自定义yaml的绝对路径 yaml_path = os.path.join(current_dir, 'custom_config.yaml') # 加载模型时显式传入配置文件路径 model = attempt_load('custom_model.pt', cfg=yaml_path) - 执行打包命令时,通过
--add-data参数将yaml文件包含进去(Windows用分号分隔路径,Linux/macOS用冒号):pyinstaller --onefile --add-data "custom_config.yaml;." your_script.py
- 修改模型加载代码,示例如下(替换原有加载逻辑):
方法2:通过PyInstaller spec文件配置依赖
- 若使用spec文件打包,直接在文件中声明需要包含的数据文件:
- 先生成基础spec文件:
pyinstaller your_script.py - 打开生成的
your_script.spec,修改datas字段,添加yaml文件的映射关系(包括自定义配置和库自带的default.yaml):
注:第二行的路径需替换为你本地环境中ultralytics库的实际安装路径datas=[ ('./custom_config.yaml', '.'), ('./venv/Lib/site-packages/ultralytics/yolov5/data/default.yaml', 'ultralytics/yolov5/data') ]
3. 基于修改后的spec文件重新打包:pyinstaller your_script.spec - 先生成基础spec文件:
方法3:设置环境变量指定配置目录
- 在代码开头添加环境变量配置,强制Ultralytics从当前目录读取配置文件:
将自定义yaml文件重命名为import os os.environ['YOLO_CONFIG_DIR'] = os.path.dirname(os.path.abspath(__file__))default.yaml后放在脚本同目录,打包时通过--add-data参数将其包含。
方法4:修复动态路径依赖问题
- 部分场景下,Ultralytics会动态构建配置文件路径,打包后临时目录结构与开发环境不一致导致找不到文件。此时可将库自带的
default.yaml复制到脚本目录,打包时一同包含,确保代码加载模型时优先读取本地配置。
额外注意事项
- 测试exe时,先在打包生成的
dist目录中运行,确保所有依赖文件(模型.pt、yaml)与exe处于同一目录; - 若使用虚拟环境打包,需确保所有依赖库(yolo、ultralytics等)都安装在虚拟环境内,避免路径混淆。
内容的提问来源于stack exchange,提问作者Bella
相关产品推荐
相关产品推荐

