Ich habe ein GRPC -Repo in einem Python Project Repo als Submodul bei SRC/GRPC/ProtOBUF mit der folgenden Beispielstruktur:
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
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?
Ich habe ein GRPC -Repo in einem Python Project Repo als Submodul bei SRC/GRPC/ProtOBUF mit der folgenden Beispielstruktur:
[code]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[/code] 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>
[code]example_structB_pb2.py[/code] hat aus data_structs [url=viewtopic.php?t=8986]importieren[/url] Beispiel_structa_pb2 [url=viewtopic.php?t=8986]importieren[/url] oder einfach Beispiel_structa_pb2
importieren[code]example_messageA_pb2.py[/code] hat aus data_structs import Beispiel_structb_pb2 Dies sollte von ..Data_structs [url=viewtopic.php?t=8986]importieren[/url] example_structb_pb2
so weiter und so fort. Dienste [url=viewtopic.php?t=8986]importieren[/url] Nachrichten sollten von ..Messages [url=viewtopic.php?t=8986]importieren[/url] anstelle von Nachrichten [url=viewtopic.php?t=8986]importieren[/url]
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?