pyinstaller 打包tensorflow2.0 遇到的大坑 cannot import name ‘pywrap_tensorflow ‘ 等问题解决方案

参考https://blog.csdn.net/TaChean/article/details/104664435

 

首先把别的环境中的pyinstaller卸载了,或者激活TF2环境;

如果直接打包中途会出现一些INFO,仔细观察可以发现pyinstaller用hook-XXX的打包了很多库,比如hook-cv2,明显是用来打包opencv的,但是到最后发现并没有hook-tensorflow等打包信息,隐隐觉得有点不对了。

 

运行试一下,果然生成的exe运行闪退了,试了无数次终于截取到了:

pyinstaller 打包tensorflow2.0 遇到的大坑 cannot import name ‘pywrap_tensorflow ‘ 等问题解决方案_第1张图片

 

观察到错误是出现在site-packages\tensorflow_core\python\__init__.py上

这个pywrap_tensorflow是这个__init__.py第一句,也就是第一句加载就出错了

 

所以进而怀疑tensorflow_core这个模块没有导进来,所以就上网查了一下,发现有自己制作hook-tensorflow的方法。

 

建立hook-tensorflow.py文件,并写下如下内容:

from PyInstaller.utils.hooks import collect_all,collect_data_files, collect_submodules


def hook(hook_api):
    packages = [
        'tensorflow',
        'tensorflow_core',
        'astor'
    ]
    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)

 

然后可以有两种方法让hook-tensorflow起效:

第一种:直接放在当前环境下的Anaconda\envs\TF2\Lib\site-packages\PyInstaller\hooks中,让hook-tensorflow与其他hook一起生效。

推荐,这样以后打包就可以直接 pyinstaller XXX.py就可以了

第二种:在XXX.py所在文件夹下新建一个文件夹,命名为hooks,然后把hook-tensorflow放进去。

cmd运行:

pyinstaller --additional-hooks-dir=hooks XXX.py

这个其实就是相当于扩充了hooks文件夹,本质上是一样的。

 

推荐第一种方法

 

你可能感兴趣的:(Python,Tensorflow)