项目场景:
写了一个简单的界面程序,需要加载一个onnx模型进行推理,为了方便交付使用,使用pyinstaller进行打包。
问题描述
一行极简的命令,完成整体打包为一个exe,并且屏蔽命令行窗口,其中--add-data "model.onnx;."表示将model.onnx打包到当前路径(.),使用;分割源路径与目标路径,但是打包成功后无法正确读取model.onnx。
pyinstaller --onefile --add-data "model.onnx;." --noconsole app.py
解决方案:
原因为:在使用 PyInstaller
打包时,读取模型文件(如 ONNX 文件)的位置可能会出现问题。为了保证正确读取,在py代码中修改读取文件的路径。
import os
import sys
def get_model_path():
if getattr(sys, 'frozen', False):
# 如果程序是打包后的状态
return os.path.join(sys._MEIPASS, 'model.onnx')
else:
# 如果是开发状态
return 'model.onnx'
model_path = get_model_path()
# 然后使用 model_path 加载你的模型
重新打包运行,能正常读取onnx模型了。