TensorFlow 2.0部署报错:module 'tensorflow' has no attribute 'gfile'求助
解决
AttributeError: module 'tensorflow' has no attribute 'gfile'错误 这个问题的根源很明确:你使用的simple_tensorflow_serving 0.6.4是针对TensorFlow 1.x开发的,但TensorFlow 2.0已经移除了tf.gfile模块——它的功能被迁移到了tf.io.gfile子模块,同时部分方法名也做了小写调整(比如tf.gfile.Exists()变成了tf.io.gfile.exists())。
下面给你三个可行的解决方案,按推荐程度排序:
方案1:改用TensorFlow官方的Serving工具(长期最优)
既然你已经用TF2训练模型,官方的TensorFlow Serving是最适配的选择,步骤也很清晰:
- 先把你的MNIST模型导出为TF2标准的
SavedModel格式(代替之前的.json格式):# 训练完模型后执行 model.save("/path/to/saved_model") - 部署服务:
- 如果在Colab中可以通过Docker启动(需要先启用Docker):
!docker run -p 8501:8501 -v "/path/to/saved_model:/models/mnist" -e MODEL_NAME=mnist tensorflow/serving - 或者直接使用
tf.saved_model.cli进行本地测试:!tf.saved_model.cli show --dir /path/to/saved_model --all
- 如果在Colab中可以通过Docker启动(需要先启用Docker):
方案2:修改simple_tensorflow_serving源码适配TF2
如果你坚持要用这个工具,可以手动修改它的源码来适配TF2的API:
- 先找到工具的安装路径:
!pip show simple_tensorflow_serving | grep Location - 进入对应的目录,找到所有引用
tf.gfile的文件(比如model.py或server.py这类核心文件):- 把所有
import tensorflow as tf后的tf.gfile替换为tf.io.gfile - 同时注意方法名的大小写变化:比如
tf.gfile.Exists(path)要改成tf.io.gfile.exists(path),tf.gfile.MakeDirs(path)改成tf.io.gfile.makedirs(path)
- 把所有
- 修改完成后重启服务即可。
方案3:降级TensorFlow到1.x版本(临时应急)
这是最简单但最不推荐的方式,因为会放弃TF2的特性:
!pip uninstall -y tensorflow !pip install tensorflow==1.15.5
注意:降级后你需要确保之前用TF2训练的模型能在TF1.x中正常加载,可能需要转换模型格式。
内容的提问来源于stack exchange,提问作者Shravan Shetty




