【工作向】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用法](https://blog.csdn.net/yjk13703623757/article/details/105721982) \[2\]. [如何从其他目录导入py文件, 推荐](https://geek-docs.com/python/python-ask-answer/482_python_how_to_import_py_file_from_another_directory.html) \[3\]. [linux下配置protobuf并编译生成pb.py文件](https://blog.csdn.net/baidu_28342107/article/details/81952868) \[4\]. [从用protoc生成的pb2.py中反向工程.proto文件](https://cloud.tencent.com/developer/ask/sof/106553421) created by shuaixio, 2024.03.06

相关推荐
zhuyasen1 天前
深度定制 protoc-gen-go:实现结构体字段命名风格控制
后端·go·protobuf
喵个咪3 天前
开箱即用的GO后台管理系统 Kratos Admin - 代码生成工具集
微服务·orm·protobuf
Watink Cpper4 天前
[Protobuf]常见数据类型以及使用注意事项
linux·开发语言·c++·protobuf
Watink Cpper14 天前
[Protobuf] 快速上手:安全高效的序列化指南
linux·开发语言·protobuf
榴弹丶2 个月前
web通过离线编译protobuf,在线解析proto二进制数据
前端·c++·protobuf
徐小黑ACG2 个月前
GO简单开发grpc
开发语言·后端·golang·grpc·protobuf
徐小黑ACG2 个月前
GO语言 使用protobuf
开发语言·后端·golang·protobuf
湫qiu3 个月前
手写 Protobuf —— Java 代码生成
java·go·protobuf
全栈ing小甘3 个月前
数据序列化协议 Protobuf 3 介绍(Go 语言)
后端·golang·protobuf·序列化协议
特立独行的猫a3 个月前
Protocol Buffers在MCU上的nanopb介绍及使用详解
单片机·嵌入式硬件·protobuf·nanopb