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

使用PyInstaller打包YOLOv8识别系统为EXE时遇路径问题求助

PyInstaller打包含ultralytics项目的解决办法

以下是针对你遇到的打包问题的几种可行解决思路:

1. 用--add-data参数强制包含ultralytics资源

PyInstaller默认不会自动识别ultralytics的非Python文件(比如配置、权重、模板等),需要手动指定要打包的资源路径。

Windows系统命令示例:

如果你的ultralytics安装在Python的site-packages目录下(比如C:\Python39\Lib\site-packages\ultralytics),执行打包命令时加上--add-data参数:

pyinstaller interface.py --onefile -w --add-data "C:\Python39\Lib\site-packages\ultralytics;ultralytics/"

如果项目目录下已经有ultralytics文件夹(比如你手动复制了依赖),则用相对路径:

pyinstaller interface.py --onefile -w --add-data "ultralytics;ultralytics/"

2. 自定义.spec文件精准配置打包内容

如果命令行参数不够灵活,可以生成.spec文件手动配置:

  1. 先生成基础spec文件:
pyinstaller interface.py --onefile -w --specpath .
  1. 打开生成的interface.spec文件,找到Analysis部分的datas列表,添加ultralytics的路径映射,同时补充隐藏依赖:
a = Analysis(
    ['interface.py'],
    pathex=[],
    binaries=[],
    # 替换成你实际的ultralytics路径
    datas=[('C:/Python39/Lib/site-packages/ultralytics', 'ultralytics')],
    hiddenimports=['ultralytics', 'ultralytics.yolo', 'ultralytics.nn', 'ultralytics.engine'],
    ...
)
  1. 用spec文件重新打包:
pyinstaller interface.spec

3. 调整代码中的路径加载逻辑

结合你已有的resource_path()函数,确保所有引用ultralytics资源的地方都使用该函数生成的绝对路径:

import os
import sys
from ultralytics import YOLO

def resource_path(relative_path):
    try:
        # 打包后的临时目录
        base_path = sys._MEIPASS
    except Exception:
        # 开发环境的当前目录
        base_path = os.path.abspath(".")
    return os.path.join(base_path, relative_path)

# 手动设置ultralytics的资源目录环境变量
os.environ['ULTRALYTICS_DIR'] = resource_path('ultralytics')

# 加载模型时使用resource_path指定完整路径
model = YOLO(resource_path('ultralytics/models/yolov8n.pt'))

如果你的模型权重是单独下载的,记得也要用--add-data把权重文件打包进去,比如:

pyinstaller interface.py --onefile -w --add-data "ultralytics;ultralytics/" --add-data "yolov8n.pt;."

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 04:15:12