【问题标题】:PyInstaller .exe file plugin could not be extracted (with Keras and ONNX converter libraries and modules)无法提取 PyInstaller .exe 文件插件(使用 Keras 和 ONNX 转换器库和模块)
【发布时间】:2020-06-28 22:14:23
【问题描述】:

我有一个 Python 脚本,它采用 ONNX 神经网络并将其转换为要训练的 keras (.h5) 模型,然后作为新训练的模型导出回 ONNX,以便稍后部署。问题是我需要从 python 脚本创建一个 python .exe 文件,因为目标是在 C Plus Plus 中部署深度学习模型。目前,Python 脚本很好地为 C Plus Plus 程序更改 onnx 程序以部署经过训练的模型,并使用以下命令使用 Pyinstaller 成功创建 .exe 文件

pyinstaller --onefile Material_Classifier.py

但是,问题是当我在文件资源管理器中单击 .exe 文件时,控制台会呈现大约半分钟为空,然后停止工作。当我使用cmd时,它给出了以下错误:

Failed to decode wchar_t from UTF-8
MultiByteToWideChar: The data area passed to a system call is too small.
share\jupyter\lab\staging\node_modules\.cache\terser-webpack-plugin\content-v2\sha512\2e\ba\cfce62ec1f408830c0335f2b46219d58ee5b068473e7328690e542d2f92f2058865c600d845a2e404e282645529eb0322aa4429a84e189eb6b58c1b97c1a could not be extracted!
fopen: No such file or directory

我的第一个预感是我的输入 ONNX 文件夹与 .exe 文件不在同一个文件夹中,因为脚本需要它进行输入,但这并没有修复 .exe 文件。现在,我倾向于 PyInstaller 可能不喜欢我在脚本中使用的以下一些库:

import os
import onnx
import keras
import keras2onnx
from onnx2keras import onnx_to_keras

import tensorflow as tf
import numpy as np
from tensorflow import keras
from tensorflow.keras import layers
from tensorflow.keras.layers import Input
from tensorflow.keras.models import Model

from tensorflow.python.keras.models import load_model

import cv2
from tqdm import tqdm
import pickle

我的第二个预感是,因为 我的程序需要一个外部文件并输出一个新文件,所以我需要在使用 Pyinstaller 创建一个 .exe 之前以某种方式指定它。 但我目前没有办法无论哪种方式都知道。

TLDR;我想知道如果我做错了其他事情,PyInstaller 是否在处理深度学习库时遇到问题,以及是否有任何替代方法可以从 python 脚本创建 .exe 文件以进行深度学习。谢谢!

【问题讨论】:

    标签: python-3.x keras pyinstaller tensorflow2.0 onnx


    【解决方案1】:

    回答我自己的问题,

    这个过程与 PyInstaller 在创建 .exe 可执行文件时无法与 Anaconda 环境一起工作有关。在卸载 Anaconda 并重新安装 Python 3.7.x 时,将 tensorflow、onnx 和 onnx.dist 文件夹复制到与我的脚本相同的目录中,然后编写时,我能够在没有外部环境的情况下成功地做到这一点

    pyinstaller --onefile --add-data C:\path\to\onnx;onnx. --add-data C:\path\to\tensorflow;tensorflow. --add-data C:\path\to\onnx-dist;onnx-dist. script.py
    

    【讨论】:

      【解决方案2】:

      不难猜到是因为缓存文件名太长导致的错误。在大多数实际情况下,进入错误消息中指定的目录并手动将文件名更改为更短的文件名就足够了。通常,share 目录位于目录Anaconda3 中。之后,您需要重新构建可执行文件并确保不再显示错误消息。

      【讨论】:

        猜你喜欢
        • 2021-12-20
        • 2018-01-31
        • 2021-11-11
        • 1970-01-01
        • 1970-01-01
        • 2023-04-06
        • 2020-12-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多