PyInstaller打包TensorFlow 1.15程序运行导入时出现ValueError问题
问题解决方案
该报错根源为conda环境下TensorFlow 1.x安装包内的protobuf自动生成.py文件携带隐藏空字符,或是PyInstaller打包时未正确过滤TensorFlow依赖项里的无效字节,并非直接的版本兼容性问题,可按以下步骤逐一排查解决:
步骤1:修复TensorFlow源码中的空字符
- 定位当前conda环境下的TensorFlow安装路径,找到报错提示的
tensorflow_core/core/framework/graph_pb2.py文件 - 用文本编辑器打开该文件,全局替换删除所有
\x00空字符后保存 - 可对同一目录下其他
*_pb2.py文件做相同处理,避免后续出现同类报错
步骤2:调整PyInstaller打包配置
打包时主动排除自动识别的TensorFlow依赖,手动将完整的TensorFlow目录作为数据文件打入包内,打包命令参考:
pyinstaller -F your_script.py --add-data "你的conda环境路径/site-packages/tensorflow;tensorflow" --add-data "你的conda环境路径/site-packages/tensorflow_core;tensorflow_core"
如果使用.spec配置文件打包,直接在datas列表中添加上述两个目录的映射即可。
步骤3:更换TensorFlow安装源
如果上面两步操作后仍然报错,卸载conda源安装的TensorFlow,改用pip官方源重新安装:
pip uninstall tensorflow -y pip install tensorflow==1.15 --no-cache-dir
重新安装后再执行打包操作即可解决空字符问题。
额外注意事项
- 打包前先清空PyInstaller的缓存目录(默认是用户目录下的
./PyInstaller文件夹,或是打包生成的build文件夹),避免旧错误缓存影响打包结果 - 优先使用PyInstaller 4.0以下版本,更高版本对Python 3.6/3.7和TensorFlow 1.x的适配性更差
内容的提问来源于stack exchange,提问作者Mike Azatov
相关产品推荐
相关产品推荐

