Ubuntu(GCloud VM)安装TensorFlow时的Protobuf版本冲突问题
解决TensorFlow安装时的protobuf与apache-beam版本冲突问题
这种依赖版本冲突在Python包安装里真的很常见,我来给你几个靠谱的解决办法,从最稳妥的到应急的都有:
1. 用虚拟环境隔离依赖(强烈推荐)
全局环境的依赖很容易互相打架,用虚拟环境把TensorFlow的依赖单独隔离开就不会有问题了:
- 先安装virtualenv(如果你的Ubuntu还没装的话):
sudo apt update && sudo apt install python3-virtualenv - 创建一个专门给TensorFlow用的虚拟环境:
virtualenv -p python3 tf_env - 激活这个虚拟环境(每次用TensorFlow前都要激活):
source tf_env/bin/activate - 现在在虚拟环境里直接安装TensorFlow和新版apache-beam,pip会自动处理兼容的版本:
新版的apache-beam(2.0及以上)已经不再强制要求protobuf 3.2.0,和TensorFlow需要的高版本protobuf完全兼容。pip install tensorflow apache-beam>=2.0.0
2. 全局环境安装兼容的版本组合
如果不想用虚拟环境,也可以手动指定一组互相兼容的包版本:
- 先把冲突的包全部卸载干净:
pip uninstall -y apache-beam protobuf tensorflow-tensorboard tensorboard tensorflow - 然后安装经过验证的兼容版本:
这个组合里,TensorFlow 1.14.0既支持高版本protobuf,又能和apache-beam 2.10.0完美配合,不会出现版本锁死的问题。pip install tensorflow==1.14.0 apache-beam==2.10.0 protobuf==3.8.0
3. 临时忽略警告应急(不推荐)
如果只是测试用,不想折腾版本,可以强制安装并忽略已有的protobuf版本:
pip install tensorflow --ignore-installed protobuf
不过这种方法可能埋下隐患,比如某些依赖包运行时会报错,只适合临时应急使用。
为啥会出现这个问题?
简单说就是旧版apache-beam(0.6.0)是TensorFlow早期版本带的依赖,它硬要求protobuf必须是3.2.0,但现在TensorFlow更新后,配套的tensorboard需要更高版本的protobuf(>=3.4.0),两边的要求撞在一起了。只要把apache-beam升级到2.x版本,这个矛盾就解决了,因为新版已经放宽了protobuf的版本限制。
内容的提问来源于stack exchange,提问作者saurabh rathor
相关产品推荐
相关产品推荐

