开发者

How to import protocol buffer definitions from another Python package?

I have my directory structure like this:

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

The root directory is in my $PYTHONPATH.

I build root/sift/sift_descriptors_pb2.py using protoc --python_out=./ sift_descriptors.proto

I build root/project/filtered_descriptors_pb2.py using /cs/public/lib/pkg/protobuf/bin/protoc --proto_path=../sift --proto_path=./ --python_out=./ filtered_descriptors.proto

开发者_运维问答

In filtered_descriptors.proto, I use import "sift_descriptors.proto"

The problem is that in filtered_descriptors_pb2.py (produced by protoc), there's a statement that just does this bare import: import sift_descriptors_pb2, without reference via the module name as would be needed: from sift import sift_descriptors_pb2.

What am I doing wrong?


You don't add .py to the import statement: "from sift import sift_descriptors_pb2"


I fixed it!

The solution was to use import "sift/sift_descriptors.proto" in filtered_descriptors.proto, and then point protoc to --proto_path=../ instead of --proto_path=../sift.

Then, protoc generates python code that does the import as import sift.sift_descriptors_pb2.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜