如何从另一个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应该指向包层次结构的根,所有导入都应该是完全限定的。文档中没有很好的描述,但他们会解决它:)