Как мне использовать grpcio-tools / grpc_tools.protocol для относительного импорта в файл proto

#protocol-buffers #grpc-python

#буферы протокола #grpc-python

Вопрос:

Допустим, у вас есть зависимые внешние интерфейсы для службы, вызываемой crane в interacescrane папке, как показано ниже

 --interfaces
-----crane
------- crane.proto
------- vehicle.proto
  

И в crane.proto, который является внешним proto, у вас есть эта относительная ссылка на vehicle proto

 import crane/vehicle.proto
....
  

Как мне использовать grpc_tools для правильной генерации буферов proto для привязки python?

Использование ниже выдает ошибку в crane.proto, что vehicles.proto не найден

 $(PYTHON) -m grpc_tools.protoc -I ./interfaces/crane --python_out=./my_proj/generated -- 
grpc_python_out=./my_proj/generated crane.proto
  

Ответ №1:

Вы можете использовать, как показано нижеhttps://github.com/grpc/grpc/issues/9575#issuecomment-293934506

 build:

$(MKDIR) -p myproj/generated
touch myproj/generated/__init__.py
$(MKDIR) -p ndn_objtrack/myproj/crane
touch myproj/generated/crane/__init__.py

$(PYTHON) -m grpc_tools.protoc -I ./interfaces/ --python_out=./my_proj/generated -- 
grpc_python_out=./my_proj/generated crane/crane.proto
  

И для использования в вашем файле Python

 import grpc

from generated.myproj import crane_pb2
from generated.myproj import crane_pb2_grpc