【工作向】protobuf编译生成pb.cc和pb.py文件

序言

  • 首先通过protoc --version查看protoc版本,避免pb文件生成方和使用方版本不一致

1. 生成pb.cc

  • 生成命令

    shell 复制代码
    protoc -I=${proto_file_dir} --cpp_out=${pb_file_dir} *.proto

    参数: -I表示 proto 文件的路径; --cpp_out 表示输出路径; 最后一个参数表示需要被编译为 pb.h 和 pb.cc 文件的 proto 文件, *.proto 表示 -I 路径下的所有 proto 文件

2. 生成pb.py

  • 生成命令

    shell 复制代码
    protoc -I=. --python_out=. person.proto	# 单个proto文件生成pb2.py文件
    protoc -I=. --python_out=. *.proto		# 所有proto文件生成pb2.py文件
  • proto包含:如果重新拷贝了所有.proto文件到同一目录下生成pb.py文件,请记得修改proto依赖路径,修改前后如下图


3. 导入pb2.py文件使用

  • 同级目录

    shell 复制代码
    import dir.test_pb2 as test__pb2
    或
    from dir import test_pb2 as test__pb2
  • 上级目录 :方法1,使用sys.path.append()

    shell 复制代码
    import sys
    sys.path.append('/path/to/another/directory')
    import another_module

    说明:sys.path是Python的搜索路径列表,它包含了模块搜索路径。我们可以向sys.path列表中添加另一个目录,使得Python可以在该目录中寻找模块文件

  • 上级目录 :方法2,使用相对路径

    shell 复制代码
    from ..another_directory import another_module

    说明:...表示上一级目录

  • 上级目录 :方法3,使用importlib

    shell 复制代码
    import importlib
    scenario_pb2 = importlib.import_module(".scenario_pb2", "protos")
    scenario_pb2 = importlib.import_module("protos.scenario_pb2")

【参考文章】

1. importlib用法

2. 如何从其他目录导入py文件, 推荐

3. linux下配置protobuf并编译生成pb.py文件

4. 从用protoc生成的pb2.py中反向工程.proto文件

created by shuaixio, 2024.03.06

相关推荐
我不会起名字3222 天前
Redis 从 0 到 1(二十七):JSON 体积是 Protobuf 的 3.7 倍?3 种序列化的 Go 基准测试
redis·go·序列化·protobuf·messagepack
j7~9 天前
【ProtoBuf】(篇一)初识 ProtoBuf
运维·服务器·序列化·protobuf·protobuf的适用特点
syagain_zsx15 天前
BRpc 搭建简单 rpc 服务器
服务器·c++·网络协议·rpc·protobuf·库
换元不配限16 天前
Android 接入 protobuf 实战:从 Gradle 配置到避开 R8 混淆坑
android·grpc·序列化·protobuf·protocolbuffers·二进制序列化·.proto
syagain_zsx17 天前
protobuf 实战:从 .proto 到 C++ 序列化的完整链路
c++·学习·程序人生·谷歌·protobuf
j7~1 个月前
【C++ 标准项目】发布订阅消息队列 (篇七):项目创建与基础工具模块搭建
开发语言·c++·log4j·uuid·protobuf·helper工具·消息定义类型和交换机类型定义
深蓝电商API1 个月前
protobuf逆向:从抓包乱码到还原数据结构
爬虫·protobuf
j7~1 个月前
【C++标准项目】C++基于protobuf的发布订阅式消息队列(篇一):项目概述+环境搭建
分布式·消息队列·rabbitmq·gtest·protobuf·muduo·sqlites
浅念-2 个月前
C++ Protobuf 入门实战:基于通讯录项目吃透proto3语法与序列化
linux·服务器·网络·c++·protobuf·proto·proto3
Zenova EdgeOS2 个月前
Go 工业边缘 Protobuf 实战:从 proto 到 Marshal 的完整落地
物联网·go·边缘计算·序列化·protobuf·工业边缘