Python protobuf gRPC generates a dependency that doesn't exist
我正在尝试通过以下方式为我的python代码创建gRPC绑定:
1 | python -m grpc_tools.protoc -I $(pwd)/protos --python_out=./fino/pb2 --grpc_python_out=./fino/pb2 -I=$GOPATH/src -I=$GOPATH/src/github.com/gogo/protobuf/protobuf $(pwd)/protos/* |
但是生成的文件具有不存在的依赖关系:
1 | from github.com.gogo.protobuf.gogoproto import gogo_pb2 as github_dot_com_dot_gogo_dot_protobuf_dot_gogoproto_dot_gogo__pb2 |
稍后用于:
1 2 3 4 5 6 7 8 9 10 | DESCRIPTOR = _descriptor.FileDescriptor( name='oracle.proto', package='oracle', syntax='proto2', serialized_pb=_b('\ \\x0coracle.proto\\x12\\x06oracle\\x1a-github.com/gogo/protobuf/gogoproto/gogo.proto\\x1a\\x1fgoogle/protobuf/timestamp.proto\\x1a\\x1bgoogle/protobuf/empty.proto\\x1a\\x0btypes.proto":\ \\x0b\\x41\\x63\\x63ountList\\x12+\ \\x08\\x61\\x63\\x63ounts\\x18\\x01 \\x03(\\x0b...') , dependencies=[github_dot_com_dot_gogo_dot_protobuf_dot_gogoproto_dot_gogo__pb2.DESCRIPTOR,google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR,google_dot_protobuf_dot_empty__pb2.DESCRIPTOR,types__pb2.DESCRIPTOR,]) |
很显然,我无法运行此代码。尝试删除不存在的导入后:
1 2 3 | TypeError: Couldn't build proto file into descriptor pool! Invalid proto descriptor for file"oracle.proto": oracle.proto: Import"github.com/gogo/protobuf/gogoproto/gogo.proto" has not been loaded. |
我尝试添加
1 | --include_imports --descriptor_set_out=$(pwd)/protos/all.proto |
但是我不确定如何将其添加到我的python文件中。我想要的只是我的python代码库中的独立描述。
EDIT1:
示例文件示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | syntax ="proto2"; package etcdserverpb; import"github.com/gogo/protobuf/gogoproto/gogo.proto"; option (gogoproto.marshaler_all) = true; option (gogoproto.sizer_all) = true; option (gogoproto.unmarshaler_all) = true; option (gogoproto.goproto_getters_all) = false; message Request { optional uint64 ID = 1 [(gogoproto.nullable) = false]; optional string Method = 2 [(gogoproto.nullable) = false]; optional string Path = 3 [(gogoproto.nullable) = false]; optional string Val = 4 [(gogoproto.nullable) = false]; optional bool Dir = 5 [(gogoproto.nullable) = false]; optional string PrevValue = 6 [(gogoproto.nullable) = false]; optional uint64 PrevIndex = 7 [(gogoproto.nullable) = false]; optional bool PrevExist = 8 [(gogoproto.nullable) = true]; optional int64 Expiration = 9 [(gogoproto.nullable) = false]; optional bool Wait = 10 [(gogoproto.nullable) = false]; optional uint64 Since = 11 [(gogoproto.nullable) = false]; optional bool Recursive = 12 [(gogoproto.nullable) = false]; optional bool Sorted = 13 [(gogoproto.nullable) = false]; optional bool Quorum = 14 [(gogoproto.nullable) = false]; optional int64 Time = 15 [(gogoproto.nullable) = false]; optional bool Stream = 16 [(gogoproto.nullable) = false]; optional bool Refresh = 17 [(gogoproto.nullable) = true]; } message Metadata { optional uint64 NodeID = 1 [(gogoproto.nullable) = false]; optional uint64 ClusterID = 2 [(gogoproto.nullable) = false]; } |
这是https://github.com/gogo/protobuf/issues/376
的续篇
我知道这是一个老问题,但我想我可以解决。我为解决该问题所做的事情: