Python protobuf gRPC生成的依赖项不';不存在
我正试图通过以下方式为我的python代码创建gRPC绑定:Python protobuf gRPC生成的依赖项不';不存在,python,protocol-buffers,grpc,proto,Python,Protocol Buffers,Grpc,Proto,我正试图通过以下方式为我的python代码创建gRPC绑定: 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/* 但生成的文件具有不存在的依赖项: from github.com.gogo.pr
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/*
但生成的文件具有不存在的依赖项:
from github.com.gogo.protobuf.gogoproto import gogo_pb2 as github_dot_com_dot_gogo_dot_protobuf_dot_gogoproto_dot_gogo__pb2
稍后将在以下内容中使用:
DESCRIPTOR = _descriptor.FileDescriptor(
name='oracle.proto',
package='oracle',
syntax='proto2',
serialized_pb=_b('\n\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\":\n\x0b\x41\x63\x63ountList\x12+\n\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,])
显然,我无法运行此代码。尝试删除不存在的导入后:
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.
我试着加上
--include_imports --descriptor_set_out=$(pwd)/protos/all.proto
但是我不确定如何将它添加到我的python文件中。我想要的只是python代码库中的自包含描述
编辑1:
原型文件示例:
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];
}
这是的延续,我知道这是一个老问题,但我想我会试一试。我是如何解决这个问题的:
github.com/gogo/protobuf/gogoproto/gogo.proto
文件下载到您的$(pwd)/protos
文件夹中;将文件命名为gogo.proto
python-m grpc_tools.protoc-I$(pwd)/protos-python_out=/fino/pb2-grpc_python_out=/fino/pb2-I=$GOPATH/src/github.com/gogo/protobuf/protobuf$(pwd)/protos/gogo.proto$(pwd)/protos/metadata.proto
(假设您将示例proto文件命名为metadata.proto
)我觉得奇怪的是,你的命令行中同时有
-I
和-I=
。我也不清楚它们的用途是什么-I=$GOPATH/src-I=$GOPATH/src/github.com/gogo/protobuf/protobuf
服务。它们是怎么进来的?你想让它们做什么?你在哪个例子中工作?你还能分享你的