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

本文详细介绍了如何使用protoc工具生成pb.cc和pb.py文件,包括不同情况下的命令行参数设置,以及在Python中从不同目录导入pb2.py文件的方法,如sys.path、相对路径和importlib的使用。
摘要由CSDN通过智能技术生成

 

序言

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

1. 生成pb.cc

  • 生成命令

    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

  • 生成命令

    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文件使用

  • 同级目录

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

    import sys
    sys.path.append('/path/to/another/directory')
    import another_module
    

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

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

    from ..another_directory import another_module
    

    说明:…表示上一级目录

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

    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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值