You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Python proto-plus Message类转换为protobuf proto文件?

proto-plus 定义的Python Message类转换为proto文件方法

proto-plus 内置了原生的proto导出能力,无需额外依赖第三方工具,操作步骤如下:

  • 确保你使用的proto-plus版本≥1.19.0,旧版本对复杂结构的导出支持不完善
  • 导入你定义好的继承自proto.Message的类,调用内置方法即可导出

代码示例

以你给出的示例代码为例,假设你将类定义保存在message_defs.py中:

import proto

class Composer(proto.Message):
    given_name = proto.Field(proto.STRING, number=1)
    family_name = proto.Field(proto.STRING, number=2)

class Song(proto.Message):
    composer = proto.Field(Composer, number=1)
    title = proto.Field(proto.STRING, number=2)
    lyrics = proto.Field(proto.STRING, number=3)
    year = proto.Field(proto.INT32, number=4)

你可以使用如下代码导出proto内容:

import proto
from message_defs import Composer, Song

# 方式1:直接输出proto文本内容
proto_text = proto.fmt(Composer, Song, package="your.package.name", syntax="proto3")
print(proto_text)

# 方式2:直接写入到本地.proto文件
proto.to_proto_file(
    "output.proto",
    Composer,
    Song,
    package="your.package.name",
    syntax="proto3"
)

导出得到的proto文件内容

syntax = "proto3";

package your.package.name;

message Composer {
  string given_name = 1;
  string family_name = 2;
}

message Song {
  Composer composer = 1;
  string title = 2;
  string lyrics = 3;
  int32 year = 4;
}

补充说明

  • 导出时支持自定义包名、proto语法版本、依赖导入等配置,直接传入对应参数即可
  • 嵌套Message、枚举、oneof、map、字段规则(可选/必填/重复)等复杂结构都可以完整导出

内容的提问来源于stack exchange,提问作者code_spector42

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 19:15:00