技术标签: protobuf python proto 测开
my_proto文件夹里有两个proto文件,book.proto想要引用person.proto文件中的Person,如下
book.proto
syntax = "proto2";
import "person.proto"; // 导入person.proto文件
message Book {
optional string name = 1;
optional float price = 2;
optional Person author = 3;
}
person.proto
syntax = "proto2";
message Person {
optional string name = 1;
optional float height = 2;
optional int32 age = 3;
optional SEX sex = 4 [ default = MALE ];
repeated Phone phone = 5;
message Phone {
optionale string number = 1;
optional Type type = 2;
}
enum Type {
HOME = 0;
MOBILE = 1;
}
enum SEX {
MALE = 0;
FEMALE = 1;
}
}
使用protoc编译protoc文件后,my_proto文件夹中的文件为:person.proto, book.proto, person_pb.py, book_pb.py
person_pb.py
文件中出现以下引用
import person_pb2 as person__pb2
构建my_test.py进行测试
import string
from my_proto import person_pb2, book_pb2
book = book_pb2.Book()
book.name = "python"
book.price = 56.7
person = book.person
person.name = "test"
person.sex = 0
person.height = 175.3
person.age = 26
for i in range(2)
tel = person.phone.add()
tel.number = "".join(random.choice(string.digits) for k in range(11))
tel.type = random.choice([0, 1])
serizalized_book = book.SerizalizeToString()
print(f"serizalized book {
serizalized_book}")
new_book = book_pb.Book()
new_book.ParseFromString(serizalized_book)
print(f"deserizalized book {
new_book}")
运行时报错:import person_pb2 as person__pb2
ModuleNotFoundError: No module named ‘person_pb2’
ModuleNotFoundError错误通常都是由于引用路径的位置不正确导致的
方法一:
# 修改book_pb.py文件
# import person_pb.py as person__pb.py
from . import person_pb.py as person__pb.py
方法二:
# 在my_proto文件夹中增加__init__.py文件
import sys
import os
sys.path.append(os.path.dirname(__file__))
参考文章:https://qa.1r1g.com/sf/ask/3775421401/
文章浏览阅读725次。开发板nfs挂载超时问题_wind和linux可以ping通mobaxterm连不上
文章浏览阅读1.9k次,点赞4次,收藏3次。标签是用于标记特定提交的静态引用。它是一个有意义的名称,用于表示项目的里程碑、版本发布或重要的提交。标签是不可变的,一旦创建就不会随着新的提交而移动。标签可以是轻量标签(lightweight tag),只是一个指向特定提交的引用也可以是注释标签(annotated tag),它包含了额外的信息(如标签的作者、日期、注释等)分支是代码开发过程中的不同线路或方向。每个分支都是从主分支(一般是master)派生出来的,开发者可以在分支上进行独立的工作,而不会影响主分支或其他分支。_git tag和branch
文章浏览阅读3.2w次,点赞19次,收藏133次。一、fft()函数matlab提供了快速傅里叶变换的函数fft(),fft函数能够进行指定点数的快速傅里叶变换。调用格式如下:resfft = fft(data1,1000); %resfft,fft 变换结果, data1--进行变换的数据,1000--指定1000点fft变换二、画出频谱图N = 1000; %点数n = 0:N-1; fs = 1000; %采样频率figureplot(n/N*fs,abs(resfft));..._matlab傅里叶变换后画频谱图
文章浏览阅读1w次,点赞5次,收藏13次。STM32输入上拉下拉 寄存器怎么设置实现在输出模式下:ODR是数据输出寄存器,但是在 输入模式下,同时也用来配置上拉下拉设置。在Alientek的源码中的按键输入实验中有如下一段初始化代码:void KEY_Init(void){ RCC->APB2ENR|=1 GPIOA->CRL&=0XFFFFFFF0;//PA0设置成输入_上拉输入怎么写
文章浏览阅读3.4k次,点赞2次,收藏12次。instr()函数(俗称:字符查找函数)格式1:instr( string1, string2 ) 格式1解释 :instr(源字符串, 目标字符串)格式2:instr( string1, string2, start_position, nth_appearance) 格式2解释:instr(源字符串, 目标字符串, 起始位置, 匹配序号)实例格式1实例select instr('helloworld','l') from table--返回结果:3 默认第..._oracle instr substr
文章浏览阅读798次。线性代数同济版 第五章 相似矩阵及二次型 易错题和总结_相似矩阵及二次型总结
文章浏览阅读3.2k次。原文http://blog.csdn.net/wiizane/archive/2007/04/10/1559654.aspx打好包的代码在我的资源里,明明上传了为什么不显示啊下载地址注 必须先编译osipparser2 然后是osip2 最后才是exosip2引用了pthread今天VC6.0环境下上对osip协议栈和exosip协议栈进行编译,学到不少知识,记录下来,当作今天_exosip_call_build_options
文章浏览阅读701次,点赞22次,收藏20次。Java基础学习主要以练习为主,很多朋友听完视频课程学会基础以后感觉对练手项目无从下手,这里推荐去牛客网看看,这里的IT题库内容很丰富,属于国内做的很好的IT学习网站,而且是课程+刷题+面经+求职+讨论区分享,一站式求职学习网站,最最最重要的里面的资源全部免费!!从基础开始练习,知识点编排详细,题目安排合理,题目表述以指导的形式进行。整个题单覆盖了java入门的全部知识点以及全部语法,通过知识点分类逐层递进,从基础开始到最后的实践任务,都会非常详细地指导你应该使用什么函数,应该怎么输入输出。...
文章浏览阅读7.1k次,点赞13次,收藏72次。文章目录socket的阻塞模式和非阻塞模式如何将socket设置为非阻塞模式send和recv函数在阻塞和非阻塞模式下的表现非阻塞模式下send和recv函数的返回值总结阻塞与非阻塞socket的各自使用场景socket的阻塞模式和非阻塞模式如何将socket设置为非阻塞模式无论是Windows还是Linux,默认创建的socket都是阻塞模式的。在linux上,我们可以使用fcntl函数或者ioctl函数给创建的socket增加O_NONBLOCK标志来将socket设置为非阻塞模式。int o_socket的怎么设置非阻塞模式
文章浏览阅读907次,点赞25次,收藏16次。提示:这里对文章进行总结:例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。
文章浏览阅读516次,点赞8次,收藏10次。在使用TC3xx芯片开发过程中,调用Mcu_PerformReset()接口函数进行软件复位,发现复位后restart,卡死在初始化过程中。由于调用的接口为软件复位,查询手册可知软件复位不会清ram,猜测可能是mcu初始化时校验ram,发现其中初始值不为0导致的错误。找到ModuleId为101的对应模块Mcu。中所示,修改MemMap_Common.h文件,将定段为NOINIT的变量改为定段到ZERO_INIT中。修改定段信息,将原本定段为NOINIT的变量改为定段到ZERO_INIT中,即初始化为0。_英飞凌芯片复位地址
文章浏览阅读2.7k次。在/etc/vim/vimrc中添加下列的语句。使用“CTRL+方向键”来选择单行向上或向下移动。_vim上移一行