当前位置: 首页 > 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/

http://www.lryc.cn/news/182045.html

相关文章:

  • C语言图书管理系统
  • 归并排序及其非递归实现
  • 【kubernetes】kubernetes中的Controller
  • RabbitMQ-死信队列
  • ElasticSearch - 基于 DSL 、JavaRestClient 实现数据聚合
  • 什么是数学建模(mooc笔记)
  • 基于SpringBoot的流浪动物管理系
  • fcpx插件:82种复古电影胶卷框架和效果mFilm Matte
  • 【LeetCode热题100】--98.验证二叉搜索树
  • wxpython:wx.grid 表格显示 Excel xlsx文件
  • 事件循环机制
  • 苹果曾考虑基于定位控制AirPods Pro自适应音频
  • 【代码阅读笔记】yolov5 rknn模型部署
  • 【多线程】进程与线程 并发编程 面试题总结
  • C++算法 —— 动态规划(10)二维费用背包
  • MySQL数据库正在耗用大量CPU的问题排查
  • php替换字符串里的a变为b
  • 黑豹程序员-架构师学习路线图-百科:CSS-网页三剑客
  • NUWA论文阅读
  • 4.Tensors For Beginners-Vector Definition
  • vertx学习总结5
  • Go,从命名开始!Go的关键字和标识符全列表手册和代码示例!
  • 【网络】网络扫盲篇 ——用简单语言和图解带你入门网络
  • 【项目开发 | C语言项目 | C语言薪资管理系统】
  • Android---GC回收机制与分代回收策略
  • 前缀、中缀、后缀表达式相互转换工具
  • Vue之ElementUI之动态树+数据表格+分页(项目功能)
  • 【CAD二次开发】给CAD添加TRUSTEDPATHS避免dll插件信任弹窗
  • 编译和链接
  • 常识判断 --- 科技常识