PyInstaller打包后运行exe提示spec文件datas数组配置的文件不存在
PyInstaller打包后找不到已配置资源文件的解决方法
首先说明根本原因:你代码中硬写的相对路径'tools/model_01_human_category.h5'默认是相对于程序启动时的工作目录解析的。PyInstaller打包为单文件exe后,运行时会将所有依赖资源解压到系统临时目录下的随机命名文件夹中,该路径不会和你的exe启动路径重合,因此硬写的相对路径无法定位到资源。
按以下步骤修改即可解决:
- 第一步:在你的业务代码中新增资源路径适配逻辑,兼容开发环境和打包后的运行环境,示例代码如下:
import sys import os def get_resource_path(relative_path): # 打包后运行时取PyInstaller注入的临时目录路径 if hasattr(sys, '_MEIPASS'): base_path = sys._MEIPASS # 开发环境下取当前工作目录 else: base_path = os.path.abspath('.') return os.path.join(base_path, relative_path)
- 第二步:修改加载模型的代码,用适配后的路径加载资源:
将原代码self.model = load_model('tools/model_01_human_category.h5')修改为:
self.model = load_model(get_resource_path('tools/model_01_human_category.h5'))
- 第三步:确认打包命令使用你编写的spec文件执行,不要直接打包py文件生成新的spec覆盖原有配置:
执行打包命令时使用pyinstaller 你的spec文件名.spec即可,你现有spec中的datas配置是正确的,无需修改。
如果修改后仍有问题,可以在加载模型前打印拼接后的路径,运行exe时即可确认程序实际查找的资源路径是否符合预期:
print(get_resource_path('tools/model_01_human_category.h5'))
内容的提问来源于stack exchange,提问作者Vinithius
相关产品推荐
相关产品推荐

