人脸口罩检测项目py文件转exe运行时的报错问题咨询
问题1:SavedModel文件不存在报错
原因
PyInstaller默认仅打包Python脚本相关的依赖文件,不会自动包含你代码中用到的h5模型、自定义目录这类非代码资源,打包后的exe运行时会优先读取自身的临时工作目录,找不到对应模型文件就触发报错。
解决步骤
- 先修改代码中加载模型的路径逻辑,适配PyInstaller打包后的运行环境:
import os import sys # 通用资源路径获取函数 def get_resource_path(relative_path): # 打包后运行状态 if getattr(sys, 'frozen', False): base_path = sys._MEIPASS # 本地开发运行状态 else: base_path = os.path.abspath(".") return os.path.join(base_path, relative_path) # 加载模型时替换原有硬编码的相对路径 model = load_model(get_resource_path("masknet.h5"))
- 打包时通过
--add-data参数指定将模型文件打包进程序,Windows环境下打包命令示例:
# 文件夹模式打包 pyinstaller --add-data "masknet.h5;." webcam.py # 单文件模式打包 pyinstaller --onefile --add-data "masknet.h5;." webcam.py
- 若你需要保存检测后的图片到
mask_on、mask_off目录,建议修改存储路径为exe所在的本地目录,避免单文件运行时临时目录自动删除导致图片找不到:
def get_exe_root_path(): if getattr(sys, 'frozen', False): return os.path.dirname(sys.executable) else: return os.path.abspath(".") mask_on_path = os.path.join(get_exe_root_path(), "mask_on") mask_off_path = os.path.join(get_exe_root_path(), "mask_off") # 自动创建目录 os.makedirs(mask_on_path, exist_ok=True) os.makedirs(mask_off_path, exist_ok=True)
问题2:_pywrap_tensorflow_internal.pyd解压失败报错
原因
该文件是TensorFlow的核心二进制依赖,体积较大,打包时压缩异常、杀毒软件误杀、版本兼容性问题都会触发该错误。
解决步骤
- 先将打包工作目录添加到杀毒软件白名单,或临时关闭杀毒软件后重新打包,80%以上的该类报错都是杀毒软件在打包过程中隔离了该二进制文件导致的。
- 打包时添加
--noupx参数禁用UPX压缩,避免大体积二进制文件压缩损坏:
pyinstaller --onefile --noupx --add-data "masknet.h5;." webcam.py
- 版本适配:升级PyInstaller到最新正式版,若使用的TensorFlow版本高于2.10,建议降级到2.8~2.10区间的稳定版,高版本TensorFlow的模块化拆分增加了PyInstaller打包的适配难度。
- 排查验证:先去掉
--onefile参数打文件夹模式的包,将masknet.h5放到生成的dist/webcam目录下运行测试,文件夹模式可正常运行的话再尝试单文件打包,可快速排除是否为资源配置问题。
内容的提问来源于stack exchange,提问作者Samuel Lee
相关产品推荐
相关产品推荐

