簡體   English   中英

如何從protobuf生成python類文件

[英]How to generate python class files from protobuf

我正在嘗試將大量結構化數據從 Java 傳輸到 Python。 這包括許多以某種形式相互關聯的對象。 當我在 Python 代碼中收到它們時,使用 protobuf 提供的類型非常難看。 當我嘗試對類型使用自動完成功能時,我的 VIM IDE 崩潰了,PyCharm 沒有完成任何事情,而且通常他們沒有為不同類型提供一些干凈的class定義似乎很荒謬。

在 python 中使用 protobuf 消息時,有沒有辦法獲得 IDE 支持? 我正在研究 20 多種處理復雜消息的方法,如果沒有 IDE 支持,我不妨用記事本編寫代碼。

在此處輸入圖片說明

我知道 protobuf 正在使用元類(雖然我不知道他們為什么這樣做)。 也許有一種方法可以從該數據生成 python 類文件,或者可能有類似於typescript 類型文件的東西。

我可能誤用了protobuf嗎? 我相信我會以一種可以跨語言使用的方式來描述我的領域模型。 在 Java 中,我對生成的類感到滿意,並且可以輕松使用它們。 我應該改用 swagger.io 之類的東西嗎?

如果您使用的是最近的 Python (3.7+),那么https://github.com/danielgtaylor/python-betterproto (免責聲明:我是作者)將生成非常干凈的 Python 數據類作為輸出,這將為您提供正確的輸入和 IDE完成支持。

例如,這個輸入:

syntax = "proto3";

package hello;

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

將生成以下輸出:

# 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 輸入,如果您碰巧跳轉到消息或字段的定義,則非常容易閱讀。 對我個人而言,與官方的 Google 編譯器插件相比,這是一個巨大的改進,並且還支持開箱即用的async gRPC。

到目前為止,沒有類似的東西可用。 您可能希望關注此問題: https : //github.com/google/protobuf/issues/2638以保持最新狀態。

mypy-protobuf生成類型提示文件。 但正如這里所討論的這僅適用於 protobuf 3.0 和 python 2.7 以上。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM