当前位置: 首页 > news >正文

【Protobuf】Python使用Protobuf

1.环境安装

官方文档:https://protobuf.com.cn/overview/

编辑器可以安装一个protobuf协议的插件

写一个test_pro.proto

syntax = "proto3";
package ts;message Pkg{string text = 1;int32 length = 2;string name = 3;message Information{string address = 1;string location = 2;}repeated Information info = 4;
}

下载protoc,文件转代码

Releases · protocolbuffers/protobuf

我们下载protoc 34.1我用的是win64

解压后,将目标文件夹/bin 配置到系统环境变量

尝试一下使用命令

protoc --version

出现

libprotoc 34.1

接下来可以使用命令将其编译成python代码

protoc --python_out=. test_pro.proto

会出现一个新的文件叫test_pro_pb2.py

先安装protobuf

pip install protobuf

运行程序,完成

Process finished with exit code 0

运行程序,出现报错,说明这个pip版本比编译器的版本低,要换编译器版本

google.protobuf.runtime_version.VersionError: Detected incompatible Protobuf Gencode/Runtime versions when loading test_pro.proto: gencode 7.35.0-rc1 runtime 7.34.1. Runtime version cannot be older than the linked gencode version. See Protobuf version guarantees at https://protobuf.dev/support/cross-version-runtime-guarantee.

运行示例

现在编写代码

from test_pro_pb2 import Pkg
from google.protobuf import json_format
import gzipp = Pkg()
p.text = 'hello world'
p.length = 16
p.name = 'hw'info = p.info.add()
info.address = "gdsjys001"
info.location = "jhwg11"info2 = Pkg.Information()
info2.address = "gdsjys002"
info2.location = "jhwg22"
p.info.append(info2)encode = p.SerializeToString()
print(encode)#ParseFromString() 是原地修改方法,返回 None,解析结果在调用对象自身。
p1 = Pkg()
decode = p1.ParseFromString(encode)
print(p1)

运行

b'\n\x0bhello world\x10\x10\x1a\x02hw"\x13\n\tgdsjys001\x12\x06jhwg11"\x13\n\tgdsjys002\x12\x06jhwg22'
text: "hello world"
length: 16
name: "hw"
info {address: "gdsjys001"location: "jhwg11"
}
info {address: "gdsjys002"location: "jhwg22"
}
http://www.jsqmd.com/news/772501/

相关文章:

  • 用状态机玩转蓝桥杯单片机LED:一个框架搞定流水灯、闪烁和状态指示
  • SenseNova-U1:NEO-Unify架构——多模态AI的真正统一
  • AISMM模型×组织韧性建设:全球仅17家通过Gartner协作成熟度L4认证企业的核心协议
  • GPU加速计算在高性能计算中的优化实践与挑战
  • 超越论文:用AB3DMOT框架快速验证你自己的3D检测器效果
  • 20251918 2025-2026-2 《网络攻防实践》实践八报告
  • 医疗大语言模型微调实战:基于CareGPT构建专业AI助手
  • 数字IC面试复盘:手撕LFSR代码时,除了功能正确你还被问了什么?
  • 第39篇:Vibe Coding时代:LangGraph 安全审查 Agent 实战,解决 AI 代码隐藏安全风险问题
  • 别再只用plt.grid(True)了!Matplotlib网格线自定义的5个实用技巧(附代码)
  • Arm Neoverse CMN S3(AE)架构与CXL 3.0技术解析
  • 如何高效解密RPG Maker MV/MZ游戏资源:Java-RPG-Maker-MV-Decrypter完整技术指南
  • 不止于PLC:用TwinCAT3调用C++模块的完整环境配置与项目实战(含WDK安装与证书配置)
  • 从零构建复古游戏合集:原生JS+Canvas游戏开发全解析
  • 终极指南:Xenia Canary如何实现Xbox 360游戏在现代PC上的完美仿真
  • APatch:突破Android Root困境的内核级创新解决方案
  • 别再死记IIP3定义了!用Python+ADS仿真,5分钟搞懂混频器线性度怎么测
  • 联邦学习开源框架全景解析:从核心原理到产业未来
  • 给娃辅导ICode竞赛?用Python坐标和列表遍历闯关的5个实战技巧(附代码拆解)
  • 为 OpenClaw Agent 工作流配置 Taotoken 统一模型接口
  • 【UNet 改进 | 注意机制篇】UNet引入iRMB反向残差注意力机制(ICCV 2023),兼顾CNN与Transformer优势,二次创新
  • Kafka:消息队列的原理与实战
  • 3步掌握SMUDebugTool:解锁AMD Ryzen处理器隐藏性能的终极指南
  • 第40篇:Vibe Coding时代:LangGraph 端到端 Coding Agent 总装实战,打通需求、代码、测试、审查、提交完整闭环
  • OpenRGB:三步统一所有RGB设备,打造个性化灯光秀
  • 跨国SaaS产品的本地化测试踩坑记录
  • llm-x:一站式大语言模型本地部署与管理工具详解
  • Cadence Allegro 17.4 实战:手把手教你搞定通孔焊盘与Flash热风焊盘(附避坑要点)
  • 2026Java面试通关指南:从基础到源码,最全高频题+答案详解
  • LG10333 [UESTCPC 2024] 打字 题解