如何移除冲突的Protocol Buffer编译器,保留protobuf==2.6.1?
我来帮你一步步解决这个版本冲突的问题——核心是找到系统里残留的高版本protoc二进制文件,彻底清理后确保conda环境中的2.6.1版本能被优先调用:
1. 定位当前生效的protoc路径
首先,找出你shell现在实际调用的protoc文件位置,这比find更精准:
which protoc
比如输出可能是/usr/bin/protoc或者某个你没注意到的自定义安装路径。
2. 彻底清理系统级protobuf包
之前用remove可能没彻底删除配置和依赖,改用purge命令完全清除所有相关包:
sudo apt-get purge --auto-remove protobuf-compiler libprotobuf-dev libprotoc-dev
这个命令会删除编译器、开发库以及所有自动安装的依赖包,不留残留。
3. 删除残留的protoc二进制文件
如果which protoc显示的路径不在apt管理的范围内(比如手动编译安装的),直接删除该文件:
sudo rm -f $(which protoc)
执行后再跑protoc --version,应该会提示“command not found”,说明残留的高版本已经被清理。
4. 重新配置conda环境并安装目标版本
先激活你的testenv环境,确保环境干净后重新安装protobuf 2.6.1:
conda activate testenv conda uninstall -y protobuf # 确保环境无残留 conda install protobuf==2.6.1
5. 确保conda环境的protoc优先被调用
检查你的PATH环境变量,确保conda环境的bin目录排在最前面,这样shell会优先使用conda里的protoc:
echo $PATH
如果/home/ubuntu/anaconda2/envs/testenv/bin不在PATH的最开头,修改你的shell配置文件(比如~/.bashrc或~/.zshrc),添加一行:
export PATH="/home/ubuntu/anaconda2/envs/testenv/bin:$PATH"
保存后重新加载配置:
source ~/.bashrc
6. 验证版本并配置编译环境
激活环境后,验证protoc版本:
conda activate testenv protoc --version
应该显示libprotoc 2.6.1。
最后,为了确保编译caffe时使用conda环境的protobuf头文件,在编译前设置环境变量:
export C_INCLUDE_PATH="/home/ubuntu/anaconda2/envs/testenv/include:$C_INCLUDE_PATH" export CPLUS_INCLUDE_PATH="/home/ubuntu/anaconda2/envs/testenv/include:$CPLUS_INCLUDE_PATH"
之后再重新编译caffe,就能避免头文件版本不兼容的问题了。
内容的提问来源于stack exchange,提问作者S.EB

