如何从protobuf生成python类文件

时间:2018-04-10 13:57:26

标签: python protocol-buffers grpc

我正在尝试将大量结构化数据从Java传输到Python。这包括许多以某种形式彼此相关的对象。当我在我的Python代码中收到它们时,使用protobuf提供的类型很安静。当我尝试在类型上使用自动完成时,我的VIM IDE崩溃了,PyCharm没有完成任何事情,而且通常看起来很荒谬,他们没有为不同的类型提供一些干净的class定义

有没有办法在python中使用protobuf消息时获得IDE支持?我正在寻找处理复杂消息的20多种方法,如果没有IDE支持,我可能会用记事本代码。

enter image description here

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

我是否可能滥用protobuf?我相信我会以可能跨语言使用的方式描述我的域模型。在Java中,我对生成的类很满意,我可以轻松地使用它们。我可能会使用类似swagger.io的东西吗?

3 个答案:

答案 0 :(得分:2)

截至目前,没有类似的可用。您可能希望关注此问题:https://github.com/google/protobuf/issues/2638是最新的。

答案 1 :(得分:1)

mypy-protobuf生成类型提示文件。但是,正如here所讨论的,这仅适用于protobuf 3.0和python 2.7及更高版本。

答案 2 :(得分:1)

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

例如,此输入:

linux.sh
--------
# do linux specific stuff
...
# call common code
source common.inc

将生成以下输出:

windows.bat
-----------
REM do windows specific things
...
# call common code
call common.inc

通常,此插件的输出模仿* .proto输入,如果您碰巧跳到消息或字段上的定义,则非常易于阅读。就我个人而言,相对于官方Google编译器插件而言,这是巨大的改进,并且开箱即用也支持syntax = "proto3"; package hello; // Greeting represents a message you can tell a user. message Greeting { string message = 1; } gRPC。