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

PyInstaller打包Python项目后运行exe报FileNotFoundError求助

PyInstaller打包Ultralytics项目时FileNotFoundError的解决方法

用PyInstaller打包Python项目生成exe后,运行报错:

Failed to execute script 'main' due to unhandled exception:
[Errno 2] No such file or directory:
'C:\\Users\\p-IN-CHE7-ptsintern\\AppData\\Local\\Temp\\_MEI96922\\ultralytics\\cfg\\default.yaml'

已尝试更新ultralytics包,但问题依旧。

问题原因

PyInstaller默认不会自动打包Ultralytics依赖的配置文件(如default.yaml),exe运行时会解压到临时目录,缺少这些文件就会触发FileNotFoundError。

解决方法

方法1:用--add-data参数手动添加文件

  1. 先获取ultralytics包的安装路径,执行命令:
pip show ultralytics

从输出的Location字段得到路径,比如C:\Users\XXX\AppData\Local\Programs\Python\Python310\Lib\site-packages

  1. 执行打包命令,添加需要的配置文件:
# Windows系统
pyinstaller --add-data "C:\Users\XXX\AppData\Local\Programs\Python\Python310\Lib\site-packages\ultralytics\cfg/*;ultralytics/cfg" --add-data "C:\Users\XXX\AppData\Local\Programs\Python\Python310\Lib\site-packages\ultralytics\assets/*;ultralytics/assets" main.py

# Linux/macOS系统
pyinstaller --add-data "/usr/local/lib/python3.10/site-packages/ultralytics/cfg/*:ultralytics/cfg" --add-data "/usr/local/lib/python3.10/site-packages/ultralytics/assets/*:ultralytics/assets" main.py
  • 注意Windows用;分隔源路径和目标路径,Linux/macOS用:

方法2:通过.spec文件配置

  1. 生成初始.spec文件:
pyinstaller main.py
  1. 打开main.spec,修改datas列表,添加Ultralytics的文件路径:
a = Analysis(
    ['main.py'],
    pathex=[],
    binaries=[],
    # 替换成你的ultralytics实际路径
    datas=[
        ('C:\\Users\\XXX\\AppData\\Local\\Programs\\Python\\Python310\\Lib\\site-packages\\ultralytics\\cfg', 'ultralytics/cfg'),
        ('C:\\Users\\XXX\\AppData\\Local\\Programs\\Python\\Python310\\Lib\\site-packages\\ultralytics\\assets', 'ultralytics/assets'),
    ],
    # ... 保留文件中其他原有内容
)
  1. 用.spec文件重新打包:
pyinstaller main.spec

方法3:代码中指定配置文件路径(备选)

如果前两种方法无效,可以在代码中适配打包后的路径:

import os
import sys

def get_ultralytics_config_path(filename):
    if getattr(sys, 'frozen', False):
        # 打包后运行环境,获取临时解压目录
        base_dir = sys._MEIPASS
    else:
        # 开发环境,获取当前文件所在目录
        base_dir = os.path.dirname(os.path.abspath(__file__))
    # 拼接配置文件路径
    return os.path.join(base_dir, 'ultralytics', 'cfg', filename)

# 使用示例:加载default.yaml
config_path = get_ultralytics_config_path('default.yaml')
# 后续用config_path读取配置文件

内容的提问来源于stack exchange,提问作者Ahill Savio

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 01:49:58