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

时间:2010-10-26 19:48:33

标签: 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

根目录位于我的$PYTHONPATH

我使用root/sift/sift_descriptors_pb2.py

构建protoc --python_out=./ sift_descriptors.proto

我使用root/project/filtered_descriptors_pb2.py

构建/cs/public/lib/pkg/protobuf/bin/protoc --proto_path=../sift --proto_path=./ --python_out=./ filtered_descriptors.proto

filtered_descriptors.proto中,我使用import "sift_descriptors.proto"

问题在于filtered_descriptors_pb2.py(由protoc生成),有一个声明只是执行此导入:import sift_descriptors_pb2,而不需要通过模块名称引用:{{1} }。

我做错了什么?

2 个答案:

答案 0 :(得分:1)

你没有在import语句中添加.py:“来自sift import sift_descriptors_pb2”

答案 1 :(得分:1)

我修好了!

解决方案是在import "sift/sift_descriptors.proto"中使用filtered_descriptors.proto,然后将protoc指向--proto_path=../而不是--proto_path=../sift

然后,protoc生成以import sift.sift_descriptors_pb2进行导入的python代码。