Генерация кода Python и Go из одного файла .proto - проблема с импортом - PullRequest
1 голос
/ 16 октября 2019

Мне трудно генерировать код для Python и Go, используя общий файл .proto. Проблемная часть заключается в том, что я использую timestamp.proto (от Google), который нужно импортировать по-разному, в зависимости от того, на каком языке должен быть сгенерированный код.

Для генератора кода Python требуется эта форма:

import "google/protobuf/timestamp.proto";

Хотя для генератора кода Go это требуется:

import "github.com/golang/protobuf/ptypes/timestamp/timestamp.proto";

Возможно ли сделать этот импорт работающим для обоих языков? Как?

1 Ответ

1 голос
/ 16 октября 2019

Этот протокольный путь неверен:

import "github.com/golang/protobuf/ptypes/timestamp/timestamp.proto"; // WRONG path

Это правильный путь импорта независимо от того, какой язык вы используете - Go или Python и т. Д .:

import "google/protobuf/timestamp.proto"; // correct path for any language (go, python etc)

ЭтоФайл timestamp.proto находится с помощью инструмента protoc-gen-go (при создании кода Go) с использованием его значения по умолчанию INCLUDE_PATH.

Например, на моем Mac, например, по умолчанию INCLUDE_PATH:

/usr/local/Cellar/protobuf/3.7.1/include

с полным путем прото-файла:

/usr/local/Cellar/protobuf/3.7.1/include/google/protobuf/timestamp.proto

Вы можете увидеть другие стандартные определения прото, которые поставляются с вашей установкой gRPC, такие как duration.proto:

$ pwd # my default gRPC include path
/usr/local/Cellar/protobuf/3.7.1/include

$ find . -name "*.proto"

./google/protobuf/timestamp.proto
./google/protobuf/field_mask.proto
./google/protobuf/api.proto
./google/protobuf/duration.proto
./google/protobuf/struct.proto
./google/protobuf/wrappers.proto
./google/protobuf/source_context.proto
./google/protobuf/any.proto
./google/protobuf/type.proto
./google/protobuf/empty.proto
./google/protobuf/compiler/plugin.proto
./google/protobuf/descriptor.proto

При условии, что вы установили инструментарий gRPC (и его заголовки) в правильном месте, согласно документам установки , тогда приведенная выше иерархия каталогов должна совпадать для любой сборки ОС.

PS this вопрос объясняет, как установить явный INCLUDE_PATH при использовании прото-компилятора.

...