背景:

安装object_detection API时,按照官方文档安装步骤,前面一切顺利,但是到了最后验证安装时,运行测试脚本:

python object_detection/builders/model_builder_tf2_test.py

出现了错误:

ImportError: cannot import name 'runtime_version' from 'google.protobuf' (D:\2_software\Anaconda\envs\tensorflow\lib\site-packages\google\protobuf\__init__.py)

在网上搜索了好多方法,问了deepseek,所有方法试过了都不行,最后靠自己阅读代码解决了。


问题描述

首先,我的电脑是windows 11 系统,只有CPU,然后说下我自己安装的版本情况:

  • Python3.9
  • tensorflow2.10.0
  • protobuf3.19.6

我是使用anaconda prompt安装的。

安装步骤我是问的deepseek,然后结合官方安装指南来安装的,事实证明,并没有什么大用,该出错的地方还是一样错,就这个API我安装了不下十次了(哭!),等俺有时间写一篇详细的安装步骤文章。

言归正传,我按照正常步骤一路顺利安装,但最后验证关头却出了错,经过排查发现,其实除了上面说到的这个错误,接下来还可能会报另一个错,那就是:

ImportError: cannot import name 'builder' from 'google.protobuf.internal'

也就是无法从“google.protobuf.internal”导入“builder”

原因分析:

仔细查看代码发现导致这个问题的原因是:
google.protobuf文件夹里面没有runtime_version.py,并且google.protobuf.internal文件夹里面没有builder.py


解决方案:

我在网上搜说是因为google.protobuf版本过低,在最新的版本里,这个问题是不存在的。但当我把protobuf版本更新到最新版,又会出现与已安装的tensorflow等版本不兼容的问题。
于是我想:既然出问题是因为protobuf缺了这两个文件,那我先把它更新到最新版本,把缺的2个文件复制一下,再把protobuf降到旧版本,把那两文件放进去行不行呢?
然后开始尝试:

先把protobuf升级到最新版本:

pip install --upgrade protobuf

升级到了最新版本:protobuf-5.29.3,但是最新版本会报版本不兼容的问题:

ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
apache-beam 2.46.0 requires protobuf<4,>3.12.2, but you have protobuf 5.29.3 which is incompatible.
tensorboard 2.10.1 requires protobuf<3.20,>=3.9.2, but you have protobuf 5.29.3 which is incompatible.
tensorflow 2.10.0 requires protobuf<3.20,>=3.9.2, but you have protobuf 5.29.3 which is incompatible.
tensorflow-metadata 1.13.0 requires protobuf<4,>=3.13, but you have protobuf 5.29.3 which is incompatible.

木有关系.

找到缺失文件,各复制出来一份

找到你下载安装的protobuf文件路径,比如我的是:D:\2_software\Anaconda\envs\tensorflow\lib\site-packages\google\protobuf
在protobuf文件及目录下的internal文件内分别找到runtime_version.py和builder.py这两个文件,各复制出来一份。

把protobuf降级到适配版本

我安装的是tensorflow2.10.0,前面pip安装它的时候默认下载依赖的是protobuf3.19.6版本,因此重新把protobuf-5.29.3降级到3.19.6版本:

pip install --upgrade protobuf==3.19.6

最后,再运行测试脚本

python object_detection/builders/model_builder_tf2_test.py

终于成功了,出现了“OK”字样。
在这里插入图片描述

更多推荐