Ubuntu 20.04下grpc_tools调用protoc提示标准proto文件未找到如何解决
问题根因
grpc_tools默认使用自身内置的protoc及protobuf标准proto文件库,不会主动读取系统全局安装的protobuf头文件路径,你系统中安装的protobuf标准proto存放路径不符合grpc_tools的默认扫描规则,因此会抛出文件找不到的错误。
解决方案
方案1:编译时手动指定导入路径
这是最直接的临时解决方案,编译proto文件时通过-I参数追加你的系统proto存放路径:
python -m grpc_tools.protoc -I/usr/local/bin/include -I. --python_out=. --grpc_python_out=. 你的目标proto文件.proto
如果是在构建脚本、setup.py中调用grpc_tools,对应在导入路径配置项中添加/usr/local/bin/include即可。
方案2:替换grpc_tools内置proto文件
如果不想每次编译都加参数,可以直接把系统的标准proto文件替换到grpc_tools的内置目录:
- 先找到grpc_tools的安装路径:
pip show grpcio-tools | grep Location - 进入返回路径下的
grpc_tools/_proto目录,将系统的标准proto文件拷贝到对应位置:cp -r /usr/local/bin/include/google/* ./google/
注意:需要保证系统安装的protobuf版本与grpcio-tools依赖的protobuf版本一致,否则可能出现兼容性问题
方案3:配置全局环境变量
配置PROTOBUF_INCLUDE_PATH环境变量指定默认搜索路径,永久生效的话可以写入用户shell配置文件:
# 临时生效(当前终端有效) export PROTOBUF_INCLUDE_PATH="/usr/local/bin/include" # 永久生效(写入bash配置,重启终端或执行source ~/.bashrc后生效) echo 'export PROTOBUF_INCLUDE_PATH="/usr/local/bin/include"' >> ~/.bashrc source ~/.bashrc
方案4:修正protobuf的安装路径(推荐)
正常编译安装protobuf时,标准头文件默认会存放在/usr/local/include目录下,是多数编译工具的默认扫描路径,你当前的头文件存放在/usr/local/bin/include属于非标准路径,大概率是编译安装protobuf时prefix参数设置错误导致的。可以重新编译安装protobuf,指定正确的安装前缀:
# 进入你的protobuf源码目录 cd /path/to/your/protobuf/source make clean ./configure --prefix=/usr/local make -j$(nproc) sudo make install sudo ldconfig
安装完成后标准proto会自动存放在/usr/local/include/google/protobuf路径下,grpc_tools可以自动扫描到。
内容的提问来源于stack exchange,提问作者eng2019
相关产品推荐
相关产品推荐

