2010-10-26 2 views
0

У меня есть структуру каталогов, как это:Как импортировать определения буфера протокола из другого пакета Python?

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, без ссылки через имя модуля, если потребуется: from sift import sift_descriptors_pb2.

Что я делаю неправильно?

ответ

1

Я установил ее!

Решение заключалось в использовании import "sift/sift_descriptors.proto" в filtered_descriptors.proto, а затем указать protoc к --proto_path=../ вместо --proto_path=../sift.

Затем protoc генерирует код python, который выполняет импорт, как import sift.sift_descriptors_pb2.

+0

Говоря с поддерживающими протокольными буферами, --proto_path должен указывать на корень иерархии пакетов, и весь импорт должен быть полностью квалифицирован. Не очень хорошо описаны в документации, но они исправят это :) – 2010-10-27 07:10:39

1

Вы не добавить .py к заявлению импорта: «от импорта sift_descriptors_pb2 сита»

+0

К сожалению, это была ошибка транскрипции. Я исправил свой вопрос. – 2010-10-26 19:59:37

+0

Спасибо! Но, чтобы быть ясным, мой вопрос все еще стоит. Сначала я просто спросил его неправильно. – 2010-10-26 20:06:13