Python:protobuf版本冲突的一种可能解决方法

项目里有很多地方用到了protobuf,比如cv2、tensorboard、paddle,这导致运行的时候总是提示protobuf版本不正确,报错信息如下:

[libprotobuf FATAL google/protobuf/stubs/common.cc:83] This program was compiled against version 3.1.0 of the Protocol Buffer runtime library, which is not compatible with the installed version (3.20.3). Contact the program author for an update. If you compiled the program yourself, make sure that your headers are from the same version of Protocol Buffers as your link-time library. (Version verification failed in “/paddle/build/paddle/fluid/framework/framework.pb.cc”.)

但是十分诡异的是,我明明已经使用pip uninstall卸载了3.20.3版本的protobuf,并重装了3.1.0版本,也根本找不到报错信息里说的安装的3.20.3版本在哪。更离谱的是另外一个几乎完全一样的程序可以正常运行,即使它也引用了几乎完全相同的库。

最后经过逐个注释import语句,发现问题竟然出现在import的顺序上!

出问题的那个程序先import paddle,后import cv2;而能正常运行的那个程序先import cv2,后import paddle,导致问题无法解决的关键竟然就只是在这里。我推测可能是paddle和cv2链接的libprotobuf库版本不同,先引入cv2可以链接pip安装的低版本libprotobuf,从而避免paddle导入时使用了系统默认的高版本libprotobuf而报错。

当然,这个问题归根到底还是因为系统里安装的protobuf版本太多了,同时有多个不同版本。但是确实找不到什么版本能彻底清理干净,其他无法解决这个问题的朋友也可以试试改变一下导入顺序能否解决。

你可能感兴趣的:(Python,python)