【问题标题】:Python protobuf gRPC generates a dependency that doesn't existPython protobuf gRPC 生成一个不存在的依赖项
【发布时间】:2018-07-20 09:08:57
【问题描述】:

我正在尝试通过以下方式为我的 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.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];
}

这是https://github.com/gogo/protobuf/issues/376的延续

【问题讨论】:

  • 在你的命令行中同时拥有-I<whitespace><argument>-I=<argument> 对我来说看起来很奇怪。我也不清楚-I=$GOPATH/src -I=$GOPATH/src/github.com/gogo/protobuf/protobuf 的用途。那些是怎么进来的?你想让他们做什么?你从什么例子开始工作?您还可以分享您的.proto 内容吗?
  • 我正在使用 gogoproto 生成 golang 代码,该代码使用了一些很酷的扩展,生成的 go 代码应该是什么样子。但它会在 python 程序和创建 python 结构方面产生问题。我更喜欢使用现代 proto3,但最重要的是我喜欢工作代码。

标签: python protocol-buffers grpc proto


【解决方案1】:

我知道这是一个老问题,但我想我会试一试。我做了什么来解决这个问题:

  1. 下载github.com/gogo/protobuf/gogoproto/gogo.proto文件到你的$(pwd)/protos文件夹;将文件命名为gogo.proto
  2. 将包含从 import "github.com/gogo/protobuf/gogoproto/gogo.proto"; 更改为 import "gogo.proto";
  3. 更改命令以显式使用 proto 文件: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/gogo.proto $(pwd)/protos/metadata.proto(假设您将示例 proto 文件命名为 metadata.proto)。

【讨论】:

    猜你喜欢
    • 2021-05-07
    • 1970-01-01
    • 2016-04-15
    • 2015-05-27
    • 2011-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多