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

python 多个proto文件import引用时出现ModuleNotFoundError错误

问题描述

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_pb2book = book_pb2.Book()
book.name = "python"
book.price = 56.7
person = book.personperson.name = "test"
person.sex = 0
person.height = 175.3
person.age = 26for 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 ossys.path.append(os.path.dirname(__file__))

参考文章:https://qa.1r1g.com/sf/ask/3775421401/

相关文章:

python 多个proto文件import引用时出现ModuleNotFoundError错误

问题描述 my_proto文件夹里有两个proto文件,book.proto想要引用person.proto文件中的Person,如下 book.proto syntax "proto2";import "person.proto"; // 导入person.proto文件message Book {optional string name 1;optional …...

C语言图书管理系统

一、 系统概述 图书管理系统是一个用C语言编写的软件系统,旨在帮助图书馆或图书机构管理其图书馆藏书和读者信息。该系统提供了一套完整的功能,包括图书录入、借阅管理、归还管理、读者管理、图书查询、统计报表等。 二、 系统功能 2.1 图书录入 管理…...

归并排序及其非递归实现

个人主页:Lei宝啊 愿所有美好如期而遇 目录 归并排序递归实现 归并排序非递归实现 归并排序递归实现 图示: 代码: 先分再归并,像是后序一般。 //归并排序 void MergeSort(int* arr, int left, int right) {int* temp (int…...

【kubernetes】kubernetes中的Controller

1 什么是Controller? kubernetes采用了声明式API,与声明式API相对应的是命令式API: 声明式API:用户只需要告诉期望达到的结果,系统自动去完成用户的期望命令式API:用户需要关注过程,通过命令一…...

RabbitMQ-死信队列

接上文 RabbitMQ-java使用消息队列 1 死信队列简介 死信队列模式实际上本质是一个死信交换机绑定的死信队列,当正常队列的消息被判定为死信时,会被发送到对应的死信交换机,然后再通过交换机发送到死信队列中,死信队列也有对应的消…...

ElasticSearch - 基于 DSL 、JavaRestClient 实现数据聚合

目录 一、数据聚合 1.1、基本概念 1.1.1、聚合分类 1.1.2、特点 1.2、DSL 实现 Bucket 聚合 1.2.1、Bucket 聚合基础语法 1.2.2、Bucket 聚合结果排序 1.2.3、Bucket 聚合限定范围 1.3、DSL 实现 Metrics 聚合 1.4、基于 JavaRestClient 实现聚合 1.4.1、组装请求 …...

什么是数学建模(mooc笔记)

什么是数学建模 前提:我们数学建模国赛计划选择C题,故希望老师的教学中侧重与C题相关性大的模型及其思想进行培训。之后的学习内容中希望涉及以下知识点: logistic回归相关知识点。如:用法、适用、限制范围等。精学数学建模中常…...

基于SpringBoot的流浪动物管理系

基于SpringBoot的流浪动物管理系的设计与实现,前后端分离 开发语言:Java数据库:MySQL技术:SpringBootMyBatisVue工具:IDEA/Ecilpse、Navicat、Maven 系统展示 首页 后台登陆界面 管理员界面 摘要 基于Spring Boot的…...

fcpx插件:82种复古电影胶卷框架和效果mFilm Matte

无论您是在制作音乐剪辑、私人假期视频还是大型广告活动,这个专业的插件都将帮助您为您的镜头赋予真正的电影角色。 复古效果在任何视频中都能立即识别出来,增添了感伤的复古氛围,并使镜头更具说服力。使用 mFilm Matte 轻松实现这些特征&…...

【LeetCode热题100】--98.验证二叉搜索树

98.验证二叉搜索树 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下: 节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。 由于二…...

wxpython:wx.grid 表格显示 Excel xlsx文件

pip install xlrd xlrd-1.2.0-py2.py3-none-any.whl (103 kB) 摘要: Library for developers to extract data from Microsoft Excel (tm) spreadsheet files pip install wxpython4.2 wxPython-4.2.0-cp37-cp37m-win_amd64.whl (18.0 MB) Successfully installed wxpython-4.…...

事件循环机制

eventLoop 事件循环(Event Loop)是用于管理和调度异步任务执行的一种机制,通常在浏览器中,也在其他 JavaScript 运行环境中存在。事件循环确保 JavaScript 单线程的执行模型下能够处理非阻塞的异步任务,以避免程序阻塞…...

苹果曾考虑基于定位控制AirPods Pro自适应音频

在一次最近的采访中,苹果公司的高管Ron Huang和Eric Treski透露,他们在开发AirPods Pro自适应音频功能时,曾考虑使用GPS信号来控制音频级别。这个有趣的细节打破了我们对AirPods Pro的固有认知,让我们对苹果的创新思维有了更深的…...

【代码阅读笔记】yolov5 rknn模型部署

一、main函数思路 二、值得学习的地方 1、关注yolov5检测流程 2、其中几个重要的结构体 typedef struct {int left;int right;int top;int bottom; } YOLOV5_BOX_RECT; // box坐标信息typedef struct {char name[YOLOV5_NAME_MAX_SIZE];int class_index;YOLOV5_BOX_RECT box…...

【多线程】进程与线程 并发编程 面试题总结

进程和线程 进程是程序执行时的一个实例,即它是程序已经执行到何种程度的数据结构的汇集。从内核的观点看,进程的目的就是担当分配系统资源(CPU时间、内存等)的基本单位。线程是进程的一个执行流,是CPU调度和分派的基…...

C++算法 —— 动态规划(10)二维费用背包

文章目录 1、动规思路简介2、一和零3、盈利计划 背包问题需要读者先明白动态规划是什么,理解动规的思路,并不能给刚接触动规的人学习。所以最好是看了之前的动规博客,以及两个背包博客,或者你本人就已经懂得动规了。 1、动规思路简…...

MySQL数据库正在耗用大量CPU的问题排查

这是一篇实战性的文章,如何处理正在发生的MYSQL服务器CPU飙升的问题,一般情况下,MySQL是不会耗用这么高的CPU的,要么是不走索引的查询,要么是同一时间出现了大量比较耗用资源的查询,不管出现的是哪一种情况…...

php替换字符串里的a变为b

$tempstrstr_replace("\\","/",$tempstr); //把$tempstr中的a替换成b $tempstrstr_replace("a","b",$tempstr);...

黑豹程序员-架构师学习路线图-百科:CSS-网页三剑客

文章目录 1、为什么需要CSS2、发展历史3、什么是CSS4、什么是SASS、SCSS 1、为什么需要CSS 作为网页三剑客的第二,CSS为何需要它,非常简单HTML只能完成页面的展现,但其做出来的页面奇丑无比。 随着网络的普及,人们的要求更高&…...

NUWA论文阅读

论文链接:NUWA: Visual Synthesis Pre-training for Neural visUal World creAtion 文章目录 摘要引言相关工作视觉自回归模型视觉稀疏自注意 方法3D数据表征3D Nearby Self-Attention3D编码器-解码器训练目标 实验实现细节与SOTA比较T2I微调T2V微调V2V微调Sketch-t…...

清华研究发现:当世界模型能够通过视觉想象而非纯文本思考时,其推理方式更接近人类!

模型能解高数题、写复杂代码,但遇到“把这张纸对折三次再剪个洞,展开后有几个窟窿”就频频卡壳。纯语言推理在符号和抽象规则上进步很快,但在物理常识、空间拓扑这些需要具象表征的任务上,依然存在明显的系统性短板。社区一直对“…...

GPU需求曲线重塑:从季节性疲软到持续高烧的产业变革

1. 从“季节性疲软”到“持续高烧”:GPU需求曲线的范式转移如果你在2020年之前关注过半导体行业,尤其是PC和图形处理器市场,你会熟悉一个词:“季节性”。通常,第二季度是传统的淡季,消费者在经历了第一季度…...

LynxPrompt Action:GitHub Actions 实现 AI 配置中心化与自动化管理

1. 项目概述:为什么我们需要一个AI配置的“中央仓库”? 如果你和我一样,日常开发中同时用着Cursor、Claude Code、GitHub Copilot,甚至还在尝试Windsurf和Aider,那你一定遇到过这个头疼的问题:每个工具的配…...

AI提示词工程实战:结构化系统与用户提示词提升AI工具效能

1. 项目概述:一个为AI工具提供高质量提示词的“弹药库”如果你和我一样,每天都在和各种AI工具打交道——从写代码的Cursor、ChatGPT,到画图的Midjourney、DALL-E,再到处理数据的Pandas AI——那你肯定遇到过这样的时刻&#xff1a…...

DRAM计算内存的电源传输网络优化策略

1. DRAM计算内存中的电源传输网络挑战与优化在数据密集型应用爆炸式增长的今天,传统冯诺依曼架构面临严峻的"内存墙"挑战。计算内存(Compute-in-Memory, CIM)技术通过在内存内部执行计算任务,从根本上改变了数据处理范式…...

别再写循环了!ABAP SQL聚合函数COUNT/AVG/MAX实战指南,5分钟搞定数据统计

ABAP SQL聚合函数实战:告别低效循环,5分钟掌握高阶统计技巧 每次看到ABAP报表里那些嵌套三层的LOOP和SORT语句,我的血压就会悄悄升高。上周review同事代码时,发现一个统计物料库存的报表竟然用了三个嵌套循环——外层遍历工厂、中…...

数据库测试的盲区:用AI生成边界值,发现隐藏的数据异常

在软件测试领域,数据库层的质量保障常常陷入一种“平静的假象”——核心CRUD操作通过、索引命中率达标、慢查询被优化,一切看似井然有序。然而线上事故统计却揭示了一个残酷的事实:超过七成的数据库相关故障并非源于架构缺陷或性能瓶颈&#…...

制造业备品备件管理痛点破解:磐石电气无人仓库解决方案

在制造业设备自动化、产线连续化运行需求日益提升的当下,备品备件、工装夹具、维修耗材及易损件等物资,已成为保障设备稳定运转、快速处置故障、降低非计划停机损失的核心支撑。尤其在电子制造、半导体、新能源、汽车零部件、电力电气等技术密集型行业&a…...

别再乱接电源了!STM32的VDDA、VSSA、VBAT引脚,一个没接对,ADC采样全是噪声

STM32电源设计实战:VDDA、VSSA与VBAT的噪声抑制艺术 当你的STM32项目遇到ADC采样值跳变、RTC计时不准或程序下载失败时,电源引脚的设计往往是罪魁祸首。许多工程师在PCB布局时,对这些看似简单的电源引脚处理过于随意,结果在调试阶…...

当三维基因组“打结”:从罕见病到癌症,那些被折叠改变的生命密码

当三维基因组“打结”:从罕见病到癌症,那些被折叠改变的生命密码 想象一下,如果把人类基因组比作一条长达两米的毛线,它需要被精巧地折叠进直径仅几微米的细胞核中。这种看似不可能的折叠并非随机——它遵循着严格的拓扑规则&…...