GRPC/Protobuf Generierte Python -Dateien verwenden falsche Import -Anweisungen
Posted: 24 Feb 2025, 05:45
Ich habe ein GRPC -Repo in einem Python Project Repo als Submodul bei SRC/GRPC/ProtOBUF mit der folgenden Beispielstruktur:
befinden sich unter src/grpc/generiert/data_structs/example_structb_pb2.py und src/grpc/generated/data_structs/example_structb_pb2_grpc.py Die Nachrichten befinden sich in den SRC/grpc/generiert/meldungen Verzeichnis usw. < /p>
Diese generierten Dateien haben fehlerhafte Importe erzeugt jedoch. < /p> hat aus data_structs importieren Beispiel_structa_pb2 importieren oder einfach Beispiel_structa_pb2
importieren hat aus data_structs import Beispiel_structb_pb2 Dies sollte von ..Data_structs importieren example_structb_pb2
so weiter und so fort. Dienste importieren Nachrichten sollten von ..Messages importieren anstelle von Nachrichten importieren
Ich hatte keine Probleme mit dieser Verzeichnis/Proto -Struktur und -generation in Java oder C ++. Gibt es eine Möglichkeit, dies für Python -generierte Code zu beheben?
Code: Select all
protobuf/
|
|-data_structs/
| |-example_structA.proto
| |-example_structB.proto
|
|-messages/
| |-example_messageA.proto
| |-example_messageB.proto
|
|-services/
|-example_service.proto
< /code>
mit vereinfachten Beispielimplementierungen: < /p>
//example_structA.proto
syntax = "proto3"
message example_structA {
int id = 1;
}
< /code>
//example_structB.proto
syntax = "proto3"
import "data_structs/example_structA.proto";
message example_structB {
int id = 1;
repeated example_structA items = 2;
}
< /code>
//example_messageA.proto
syntax = "proto3"
import "data_structs/example_structB.proto"
message example_messageA {
string info = 1;
example_structB data = 2;
}
< /code>
//example_messageB.proto
syntax = "proto3"
message example_messageB {
string status = 1;
}
< /code>
//example_service.proto
syntax = "proto3"
import "messages/example_messageA.proto";
import "messages/example_messageB.proto";
service example_service {
rpc SendMessage (example_messageA) returns (example_messageB) {}
}
< /code>
I am generating the python code with the following command, run from the python projects root dir:
find src/grpc/protobuf -name "*.proto" | xargs python -m grpc_tools.protoc =I=./src/grpc/protobuf --python_out=./src/grpc/generated --grpc_python_out=./src/grpc/generated
< /code>
This correctly generates .py files in the src/grpc/generated directory, and places them into subdirectories that mimic the proto repo structure. e.g. the files for example_structB
Diese generierten Dateien haben fehlerhafte Importe erzeugt jedoch. < /p>
Code: Select all
example_structB_pb2.py
importieren
Code: Select all
example_messageA_pb2.py
so weiter und so fort. Dienste importieren Nachrichten sollten von ..Messages importieren anstelle von Nachrichten importieren
Ich hatte keine Probleme mit dieser Verzeichnis/Proto -Struktur und -generation in Java oder C ++. Gibt es eine Möglichkeit, dies für Python -generierte Code zu beheben?