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

PyInstaller打包PySimpleGUI GUI程序报错FileNotFoundError:文件或目录不存在

解决PyInstaller打包后找不到模型文件的问题

问题根源

你代码里用了mymodels/model1.h5这类相对路径,但PyInstaller打包后,程序运行时的工作目录和开发环境完全不同,且模型文件不会自动被纳入包中,导致运行时触发FileNotFoundError。

具体解决步骤

1. 让PyInstaller打包模型文件

你需要明确告诉PyInstaller要把mymodels文件夹里的文件一起打包,有两种方式:

  • 命令行参数直接指定
    Windows平台执行:

    pyinstaller --add-data "mymodels/*;mymodels/" your_script.py
    

    Mac/Linux平台执行:

    pyinstaller --add-data "mymodels/*:mymodels/" your_script.py
    

    (注:Windows用;分隔源路径和目标路径,Mac/Linux用:)

  • 通过.spec文件配置
    先生成.spec文件:pyinstaller your_script.py,然后打开生成的.spec文件,修改datas字段:

    datas=[('mymodels/*.h5', 'mymodels'), ('mymodels/*.joblib', 'mymodels')],
    

    再用pyinstaller your_script.spec重新打包。

2. 修改代码中的路径获取逻辑

打包后程序会在临时目录运行,必须动态获取文件的实际路径,替换原来的硬编码相对路径:

import os
import sys
import PySimpleGUI as sg
import keras
import joblib

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

window = sg.Window('Loading please wait...', layout, resizable=False, size=(400, 100), finalize=True)

# 用动态路径加载模型
model1 = keras.models.load_model(get_resource_path('mymodels/model1.h5'))
model2 = joblib.load(get_resource_path("mymodels/model2.joblib"))
model3 = joblib.load(get_resource_path("mymodels/model3.joblib"))
window.close()

3. 额外注意事项

  • 确认mymodels文件夹的层级结构和代码中的路径完全匹配
  • 如果用-F参数打包成单文件,上述get_resource_path函数依然能正确获取临时解压目录的路径
  • Mac平台打包完成后,若遇到权限问题,可执行chmod +x your_executable赋予可执行权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 04:53:13