小编Rob*_*man的帖子

Python protobuf gRPC生成不存在的依赖项

我正在尝试通过以下方式为我的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/*
Run Code Online (Sandbox Code Playgroud)

但是生成的文件具有不存在的依赖关系:

from github.com.gogo.protobuf.gogoproto import gogo_pb2 as github_dot_com_dot_gogo_dot_protobuf_dot_gogoproto_dot_gogo__pb2
Run Code Online (Sandbox Code Playgroud)

稍后用于:

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,])
Run Code Online (Sandbox Code Playgroud)

显然,我无法运行此代码。尝试删除不存在的导入后:

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.
Run Code Online (Sandbox Code Playgroud)

我尝试添加

--include_imports --descriptor_set_out=$(pwd)/protos/all.proto  
Run Code Online (Sandbox Code Playgroud)

但我不确定如何将其添加到我的python文件中。我想要的只是我的python代码库中的独立描述。

EDIT1:示例原型文件:

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 …
Run Code Online (Sandbox Code Playgroud)

python protocol-buffers proto grpc

11
推荐指数
1
解决办法
970
查看次数

标签 统计

grpc ×1

proto ×1

protocol-buffers ×1

python ×1