如何从另一个Python包导入协议缓冲区定义?

如何从另一个Python包导入协议缓冲区定义?,python,protocol-buffers,Python,Protocol Buffers,我的目录结构如下: root/ sift/ __init__.py sift_descriptors.proto sift_descriptors_pb2.py project/ __init__.py filtered_descriptors.proto filtered_descriptors_pb2.py filtered_descriptors_test.py 根目录位于my$PYTHONPATH中 我使用protoc--

我的目录结构如下:

root/
  sift/
    __init__.py
    sift_descriptors.proto
    sift_descriptors_pb2.py
  project/
    __init__.py
    filtered_descriptors.proto
    filtered_descriptors_pb2.py
    filtered_descriptors_test.py
根目录位于my
$PYTHONPATH

我使用
protoc--python\u out=./sift\u描述符.proto
构建
root/sift/sift\u描述符\u pb2.py

我使用
/cs/public/lib/pkg/protobuf/bin/protoc--proto_path=../sift--proto_path=./--python_out=./filtered_descriptor.proto构建

filtered\u descriptors.proto
中,我使用
import“sift\u descriptors.proto”

问题是在
过滤的描述符\u pb2.py
(由protoc生成)中,有一条语句只执行这个简单的导入:
导入sift\u描述符\u pb2
,而不需要通过模块名称引用:
来自sift导入sift\u描述符\u pb2


我做错了什么?

您没有将.py添加到导入语句:“从sift导入sift\u描述符\u pb2”

我修复了它

解决方案是在
过滤描述符.proto
中使用
导入“sift/sift\u descriptors.proto”
,然后将
protoc
指向
--proto\u path=../
而不是
--proto\u path=..//sift>


然后,protoc生成python代码,作为导入sift.sift\u描述符\u pb2

谢谢!但是,我要澄清的是,我的问题仍然存在。刚开始我问错了。与协议缓冲区的维护人员交谈,-proto_path应该指向包层次结构的根,所有导入都应该是完全限定的。文档中没有很好的描述,但他们会解决它:)