首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从protobuf生成python类文件

如何从protobuf生成python类文件
EN

Stack Overflow用户
提问于 2018-04-10 13:57:26
回答 3查看 14K关注 0票数 14

我正在尝试将大量结构化数据从Java传输到Python。这包括许多以某种形式相互关联的对象。当我在我的Python代码中接收到它们时,使用protobuf提供的类型是非常糟糕的。我的VIM IDE在尝试对类型使用自动完成时崩溃了,PyCharm没有完成任何事情,通常情况下,它们没有为不同类型提供一些干净的class定义,这似乎是荒谬的。

在python中处理protobuf消息时,是否有一种获得IDE支持的方法?我正在查看处理复杂消息的20+方法,如果没有IDE支持,我也可以使用记事本编写代码。

我知道protobuf正在使用元类(虽然我不知道他们为什么这么做)。也许有一种方法可以从这些数据生成python类文件,或者可能有类似于打字记录文件的东西。

我是不是误用了原型机?我相信我会用一种可以跨语言使用的方式来描述我的领域模型。在Java中,我对生成的类很满意,我可以很容易地使用它们。我是否应该用像swagger.io这样的东西来代替呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-09-23 07:22:56

原型生成类型提示文件。但是,正如所讨论的,这里只能从Protobuf3.0和python2.7开始工作。

票数 2
EN

Stack Overflow用户

发布于 2019-10-31 04:38:22

如果您使用的是最近的Python (3.7+),那么https://github.com/danielgtaylor/python-betterproto (免责声明:我是作者)将生成非常干净的Python作为输出,这将为您提供正确的输入和IDE完成支持。

例如,这个输入:

代码语言:javascript
运行
复制
syntax = "proto3";

package hello;

// Greeting represents a message you can tell a user.
message Greeting {
  string message = 1;
}

将产生以下输出:

代码语言:javascript
运行
复制
# Generated by the protocol buffer compiler.  DO NOT EDIT!
# sources: hello.proto
# plugin: python-betterproto
from dataclasses import dataclass

import betterproto


@dataclass
class Hello(betterproto.Message):
    """Greeting represents a message you can tell a user."""

    message: str = betterproto.string_field(1)

一般来说,这个插件的输出模仿*.proto输入,如果您碰巧跳到消息或字段上的定义,则很容易阅读。这对我个人来说是一个巨大的进步,与官方的谷歌编译器插件相比,它也支持async gRPC。

票数 16
EN

Stack Overflow用户

发布于 2018-04-10 17:54:46

到目前为止,没有任何这样的东西可用。您可能需要跟踪这个问题:https://github.com/google/protobuf/issues/2638是最新的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49755565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档