Windows 10 pyinstaller tensorflow缺少模块。

5
我尝试使用pyinstaller部署模型,但运行时出现以下错误:

ModuleNotFoundError: 找不到名为 'tensorflow.python._pywrap_tensorflow_internal' 的模块

版本信息:

Tensorflow 1.7.0

cudnn64_7

CUDA 9.0

Python 3.6

3个回答

1
您可以通过将dist文件夹中包含的_pywrap_tensorflow_internal.pyd文件重命名为tensorflow.python._pywrap_tensorflow_internal.pyd来解决此问题。我仍需要弄清楚如何告诉pyinstaller“正确”的模块名称。

0

(仅适用于Python 3.5的解决方法)

在Jascha的解决方案基础上,一个解决方法是手动从以下位置获取文件__python._pywrap_tensorflow_internal.pyd

PathToAnaconda3/env//Lib/site-packages/tensorflow/python/__python._pywrap_tensorflow_internal.pyd

将其重命名为 tensorflow.python.__python._pywrap_tensorflow_internal.pyd

然后可以通过以下方式将此重命名文件移动到exe文件中:

pyinstaller -F <name of python file> --add-data "pathToFile/tensorflow.python.__python._pywrap_tensorflow_internal.pyd";.

标志 --add-data 接受两个由分号分隔的参数

--add-data source_path;destination_path_inside_exe

我按照你说的方法尝试了,但没有成功。我正在使用pyinstaller将我的py文件打包成一个.exe文件在Windows上运行。我们使用的是同一个系统吗? - Long
我正在使用Windows 10 64位操作系统下的Python 3.5。很抱歉,我忘记提到它不适用于Python 3.6。 - Shahruk Hossain
我正在使用Python 3.5.1,但是在Anaconda目录中找不到tensorflow文件夹和__python._pywrap_tensorflow_internal.pyd文件。我已经从https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-1.10.1-py3-none-any.whl安装了TensorFlow版本1.10.1。你是如何安装你的TensorFlow的? - Edwin Yeo
@EdwinYeo 实际上,它并不是 Anaconda 目录中的文件,而是分发文件夹中的文件,即带有生成 *.exe 的文件夹。如果你只有一个单独的 .exe 文件,因为你使用了 pyinstaller 的 --one-file 标志,请移除该标志。然后,将 _pywrap_tensorflow_internal.pyd 文件从根目录移动到 ./tensorflow/python/_pywrap_tensorflow_internal.pyd 并启动你的程序.exe。它应该可以正常工作。 - Overdrivr
我使用pip安装了tensorflow。Overdrivr说的也可以,但是你不会得到一个单独的.exe文件。基本上,当您想要生成单个exe文件时,必须手动告诉pyinstaller将所需的.pyd文件复制到exe文件中。(a) 您可以在安装tensorflow的任何位置搜索__python._pywrap_tensorflow_internal.pyd,并按照OP中的步骤执行或者(b) 您可以执行EdwinYeo所说的操作,从生成的dist文件夹获取pyd文件并使用它重新构建exe文件。 - Shahruk Hossain
我应该澄清我的答案,如果你想要一个单独的exe文件,你应该找到一种方法告诉pyinstaller将_pywrap_...文件移动到tensorflow/python(或在运行pyinstaller之前将其重命名为tensorflow.python._pywrap...,但我没有尝试过这个)。我的评论只是为了帮助你理解为什么导入失败。 - Overdrivr

0
在使用pyinstaller进行编译时,将_pywrap_tensorflow_internal.pyd作为二进制文件添加进去。
我正在使用Tensorflow 2.10,Python 3.10和Pyinstaller 5.13.0。以下是我所做的操作:
在.spec文件中,
a = Analysis(
  ['test.py'],

  pathex=[],

  binaries=[('path_to_tensorflow_python_folder\_pywrap_tensorflow_internal.pyd', '.')],

  ...
)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接