使用grpcio-tools生成含google.type.Decimal的_pb2文件遇错求助
解决gRPC导入google.type.Decimal编译错误的方法
问题原因
protoc编译时仅指定了当前项目的./proto作为导入路径,无法定位到googleapis-common-protos包中存放于site-packages目录下的google/type/decimal.proto文件,导致导入失败。
解决步骤
1. 获取site-packages绝对路径
执行以下命令,获取虚拟环境中site-packages目录的绝对路径:
python -c "import site; print(site.getsitepackages()[0])"
输出示例:/home/user/venv/lib/python3.10/site-packages
2. 修改protoc编译命令
将获取到的site-packages路径添加到protoc的-I(导入路径)参数中,与原有./proto路径并列:
python -m grpc_tools.protoc -I./proto -I<site-packages绝对路径> --python_out=./proto/ --grpc_python_out=./proto/ --mypy_out=./proto/ ./proto/*.proto
假设site-packages路径为./venv/lib/python3.10/site-packages,实际命令如下:
python -m grpc_tools.protoc -I./proto -I./venv/lib/python3.10/site-packages --python_out=./proto/ --grpc_python_out=./proto/ --mypy_out=./proto/ ./proto/*.proto
3. 验证编译结果
执行修改后的命令后,protoc将能正确找到google/type/decimal.proto文件,顺利生成对应Python代码,原有的编译错误会消失。
额外说明
- 确认
googleapis-common-protos包已正确安装(当前1.63.0版本兼容),且site-packages目录下确实存在google/type/decimal.proto文件。 - 生成的代码会自动处理
google.type.Decimal的导入逻辑,后续可直接通过生成的代码引用该类型完成Decimal数据的gRPC传递。
内容的提问来源于stack exchange,提问作者Alpensin
相关产品推荐
相关产品推荐

