user334856
user334856

Reputation:

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?

Upvotes: 0

Views: 2123

Answers (2)

user334856
user334856

Reputation:

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.

Upvotes: 1

Jason Baker
Jason Baker

Reputation: 198597

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

Upvotes: 1

Related Questions