参考https://blog.csdn.net/TaChean/article/details/104664435
首先把别的环境中的pyinstaller卸载了,或者激活TF2环境;
如果直接打包中途会出现一些INFO,仔细观察可以发现pyinstaller用hook-XXX的打包了很多库,比如hook-cv2,明显是用来打包opencv的,但是到最后发现并没有hook-tensorflow等打包信息,隐隐觉得有点不对了。
运行试一下,果然生成的exe运行闪退了,试了无数次终于截取到了:
观察到错误是出现在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文件夹,本质上是一样的。
推荐第一种方法