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版本太多了,同时有多个不同版本。但是确实找不到什么版本能彻底清理干净,其他无法解决这个问题的朋友也可以试试改变一下导入顺序能否解决。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值