如何正确导入不同包 .proto 文件中的 protobuf 消息?

How to import protobuff message in different package's .proto file correctly?

我有两个这样的包裹

com.abc.
         protobuf.
                    share.proto
         depart.
                    detect.proto 

和 share.proto 的内容是这样的:

syntax = "proto3";
package com.adc.protobuf;
message Test{}

和detect.proto的内容是这样的:

syntax = "proto3";
package com.adc.depart;
import "com/abc/protobuf/share.proto"

并像这样在它的目录中编译 share.proto:

protoc -I=. --python_out=. share.proto

然后像这样在它的目录中编译 detect.proto:

protoc -I=/pathToSrcDir/ -I=. --python_out=. detect.proto 

pathToSrcDir has been added to PYTHONPATH

所有编译工作正常,但是当 运行 一个 python 脚本时

from com.abc.depart import detect_pb2

遇到这个错误

TypeError: Couldn't build proto file into descriptor pool!
Invalid proto descriptor for file "detect.proto":
  detect.proto: Import "com/abc/protobuf/share.proto" has not been loaded.
  com.abc.depert.XClass.ymethod: "com.abc.protobuf.Test" seems to be defined in "share.proto", which is not imported by "detect.proto".  To use it here, please add the necessary import.

如何解决这个导入问题?

Some guy answered my question 简而言之,include 的使用不一致是问题的根源。

解决方法是

cd /pathToSrcDir/
protoc -I. --python_out=. com/abc/protobuf/share.proto 
protoc -I. --python_out=. com/abc/depart/detect.proto