如何将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
相关产品推荐
相关产品推荐

