使用pyinstaller打包时候踩了一些坑,每次运行的时候一调用模型程序就崩了
这里记录一下解决过程

安装pyinstaller

pip install pyinstaller

生成pyinstaller打包的配置文件

首先先生成pyinstaller打包的配置文件

pyinstaller -w -i  favicon.ico main.py --additional-hooks-dir=hooks

favicon.ico是我程序的图标
main.py是我运行的主程序
不需要图标就去掉-i favicon.ico参数即可

运行时执行Ctrl + C 中止运行
因为我们要修改main.spec文件
打开打包路径下的main.spec文件进行修改

  • 因为我用了cuda库64位 11.7版本,所以 设置datas中添加cudart64_110.dll
  • 使用了keras也要引用进去
# -*- mode: python ; coding: utf-8 -*-


block_cipher = None


a = Analysis(
    ['main.py'],
    pathex=[],
    binaries=[],
    datas=['tensorflow.python._pywrap_tensorflow_internal.pyd', 'cudart64_110.dll'],
    hiddenimports=['keras.*'],
    hookspath=['hooks'],
    hooksconfig={},
    runtime_hooks=[],
    excludes=[],
    win_no_prefer_redirects=False,
    win_private_assemblies=False,
    cipher=block_cipher,
    noarchive=False,
)
pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)

exe = EXE(
    pyz,
    a.scripts,
    [],
    exclude_binaries=True,
    name='智慧垃圾回收系统',
    debug=False,
    bootloader_ignore_signals=False,
    strip=False,
    upx=True,
    console=False,
    disable_windowed_traceback=False,
    argv_emulation=False,
    target_arch=None,
    codesign_identity=None,
    entitlements_file=None,
    icon='favicon.ico',
)
coll = COLLECT(
    exe,
    a.binaries,
    a.zipfiles,
    a.datas,
    strip=False,
    upx=True,
    upx_exclude=[],
    name='智慧垃圾回收系统',
)

修改调用keras的py文件

接着修改调用keras的py文件
原先是使用tf.keras进行调用全部改为使用keras进行调用

#import tensorflow as tf
import keras

比如原先是

model = tf.keras.models.Sequential()

改为

model = keras.models.Sequential()

创建hook-tensorflow.py文件收集tensorflow

然后创建hook文件夹
在hook文件夹下创建hook-tensorflow.py文件
这个文件用来解决pyinstaller 打包时候无法hook tensorflow的问题
输入内容
我项目用到了tensorflowkeras,所以收集这两个模块

from PyInstaller.utils.hooks import collect_all
def hook(hook_api):
    packages = [
        'tensorflow',
        'keras'
    ]
    for package in packages:
        datas, binaries, hiddenimports = collect_all(package)
        hook_api.add_datas(datas)
        hook_api.add_binaries(binaries)
        hook_api.add_imports(*hiddenimports)

运行pyinstaller打包

运行

pyinstaller main.spec

之后会将项目收集到dist文件夹下面
根据main.spec的配置保存到了coll 参数里设置的智慧垃圾回收系统文件夹中

进入这个文件夹,复制_pywrap_tensorflow_internal.pyd到该目录下的tensorflow文件夹中
在这里插入图片描述
自此打包结束

打开exe运行测试

测试后是正常加载模型的(我的代码在软件启动时会预加载模型测试,加载失败会抛出异常无法顺利进入主页面)
在这里插入图片描述

在这里插入图片描述

Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐