You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PyInstaller --onefile打包YOLOv8时default.yaml缺失如何解决

解决PyInstaller --onefile打包YOLOv8缺少default.yaml的问题

问题根源

使用--onefile打包时,PyInstaller未自动收集Ultralytics库依赖的配置文件(如default.yaml),导致程序运行时在临时目录中找不到这些必要文件。

解决方案

方法1:手动添加Ultralytics配置文件到打包命令

  1. 找到Python环境中ultralytics/cfg目录的实际路径:
    • 执行pip show ultralytics查看库的安装位置,比如输出的Location字段为C:\Python39\Lib\site-packages,则cfg目录路径为C:\Python39\Lib\site-packages\ultralytics\cfg。
  2. 修改打包命令,将cfg目录下的文件纳入打包范围:
    pyinstaller --onefile --add-data "best.pt;." --add-data "C:\Python39\Lib\site-packages\ultralytics\cfg;ultralytics/cfg" main.py
    
    注意替换命令中的cfg路径为你实际的库安装路径,Windows系统下用分号分隔源路径和打包后的目标路径。

方法2:使用PyInstaller Hook自动收集依赖文件

  1. 在项目根目录创建hook-ultralytics.py文件,内容如下:
    from PyInstaller.utils.hooks import collect_data_files
    
    datas = collect_data_files('ultralytics')
    
  2. 执行以下命令打包:
    pyinstaller --onefile --add-data "best.pt;." --additional-hooks-dir=. main.py
    
    该Hook会自动扫描并收集Ultralytics所有依赖的数据文件(包括配置yaml、权重模板等),无需手动指定路径。

补充代码调整(可选)

如果方法1执行后仍存在路径识别问题,可在代码中导入YOLO前添加以下逻辑,强制Ultralytics从打包后的临时目录读取资源:

if __name__ == '__main__':
    base_path = getattr(sys, '_MEIPASS', os.path.dirname(os.path.abspath(__file__)))
    # 添加以下两行代码
    import ultralytics
    ultralytics.__path__ = [os.path.join(base_path, 'ultralytics')] + ultralytics.__path__
    
    anvil_model= os.path.join(base_path,'best.pt')
    model = YOLO(anvil_model) 
    detect_realtime(model)

内容的提问来源于stack exchange,提问作者Mr Z

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 02:34:53