【问题标题】:Pyinstaller created exe file can not load a keras nn modelPyinstaller 创建的 exe 文件无法加载 keras nn 模型
【发布时间】:2018-01-31 11:34:18
【问题描述】:

我的 python 脚本包括:

from keras.models import model_from_json
model = model_from_json(open("test.json").read())
model.load_weights("test.h5")
model.compile(loss="mean_squared_error", optimizer = "adam")

然后,我使用上述脚本中的 pyinstaller 创建了一个 exe 文件。 exe 文件无法加载保存的模型。对此的任何想法将不胜感激。

【问题讨论】:

  • 错误消息将有助于诊断问题。您是在单文件模式还是单目录模式下创建 exe? test.h5 是否放置在可执行文件附近?
  • 最初我使用这个:pyinstaller -w myscript.py 在一个目录中创建exe和依赖库。和错误:ModuleNotFoundError:没有名为“h5py.defs”的模块 ModuleNotFoundError:没有名为“h5py.utils”的模块我已经导入了h5py:导入h5py我使用这个命令来解决错误:pyinstaller -w --hidden-import = h5py。 defs --hidden-import=h5py.utils myscript.py 我得到了这个错误:ModuleNotFoundError: No module named 'h5py.h5ac'
  • 我的建议太长 - 将其移至回答。对不起,如果它没有帮助。
  • 确实有帮助。感谢您的宝贵时间。

标签: python keras pyinstaller


【解决方案1】:

如果您收到有关h5py 子模块的错误,请尝试使用collect_submodules function 将它们全部添加到hidden_imports

您可能注意到了由 pyinstaller 生成的名为 myscript.spec 的文件。在这个文件中是关于如何构建脚本的说明(它也只是一个 python 代码!)。

所以试着像这样编辑这个myscript.spec

from PyInstaller.utils.hooks import collect_submodules

hidden_imports = collect_submodules('h5py')

a = Analysis(['myscript.py'],
         binaries=None,
         datas=[],
         hiddenimports=hidden_imports,
         hookspath=[],
         runtime_hooks=[],
         excludes=[],
         win_no_prefer_redirects=False,
         win_private_assemblies=False,
         cipher=None)

# ... rest of a file untouched

然后针对该文件运行pyinstallerpyinstaller myscript.spec

【讨论】:

  • 直截了当的解决方案?
  • 我应该在 hidden_​​imports 中放置哪些模块?就我而言,问题在于熊猫和其他东西。所以我只是想知道我应该隐藏哪些其他模块?
【解决方案2】:

这解决了错误:

pyinstaller -w --hidden-import=h5py.defs --hidden-import=h5py.utils --hidden-import=h5py.h5ac --hidden-import=h5py._proxy myscript.py

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多