同目录下.proto文件导入失败及Python编译报错问题求助
解决Proto文件导入及编译错误的方案
问题根源
- 导入路径错误:
protoc的-I=./proto参数已将web/proto设为proto文件的根搜索目录,导入时无需带web/proto前缀,直接使用同级文件名即可。 - 语法遗漏:两个proto文件的字段定义结尾都缺少分号,导致编译解析失败。
- 编译范围不全:仅编译
messages_v1.proto无法确保依赖的messages.proto生成文件与当前文件正确关联。
修正步骤
1. 修复messages.proto语法错误
补全字段末尾的分号:
syntax = "proto3"; message A { string i = 1; string j = 2; }
2. 修复messages_v1.proto的导入路径与语法错误
修改导入路径为同级文件名,同时补全字段分号:
syntax = "proto3"; import "messages.proto"; message B { A x = 3; }
3. 调整编译命令
同时编译两个proto文件,确保生成的pb2文件关联正确:
web$ protoc -I=./proto --python_out=./server/my_package/protobuf/ ./proto/messages.proto ./proto/messages_v1.proto --experimental_allow_proto3_optional
验证结果
执行修正后的命令后,web/server/my_package/protobuf目录下的messages_pb2.py和messages_v1_pb2.py会正确生成,且messages_v1_pb2.py可正常引用messages_pb2中的A类型。
内容的提问来源于stack exchange,提问作者AIGAMER
相关产品推荐
相关产品推荐

