protobuf grpc relative import path discrepancy in python

Viewed 749

I emit the proto compilation into a generated_code/ directory(say communicator_pb2.py and communicator_pb2_grpc.py). Now, the grpc output imports the python code like so import communicator_pb2 as communicator__pb2; without having to modify the import path to import generated_code.communicator_pb2 as communicator__pb2 or append generated_code to sys.path, what is the most legal way to import if I were to import like:

import generate_code.commuinicator_pb2 as communicator_pb2
import generate_code.commuinicator_pb2_grpc as communicator_pb2_grpc
1 Answers

The command python -m grpc_tools.protoc ... myfile.proto chooses python package based on relative path to myfile.proto. So to use generated_code as package, you can:

cp myfile.proto generated_code/myfile.proto
python -m grpc_tools.protoc ... generated_code/myfile.proto

Or you can automatically patch the generated file to use relative import:

sed -i 's/^import .*_pb2 as/from . \0/' generated_code/commuinicator_pb2_grpc.py
Related