Jupyter Notebook中导入同目录ipynb模块遇ModuleNotFoundError: No module named 'item'问题求助
解决Jupyter Notebook中导入.ipynb父类的问题
嘿,我来帮你搞定这个导入报错的问题!你遇到的ModuleNotFoundError: No module named 'item',核心原因是Python默认不会将.ipynb文件识别为可导入的模块——普通的import语句只会查找.py后缀的源代码文件。下面给你几种实用的解决办法:
方法一:将.ipynb文件转换为.py文件
这是最直接的方式,步骤很简单:
- 打开你的
item.ipynb文件 - 点击Jupyter菜单栏的
File->Download as->Python (.py) - 将生成的
item.py文件放到和phone.ipynb相同的目录下
之后你就可以用原本的导入语句了,不过要注意:如果后续修改了item.ipynb的内容,需要重新导出一次.py文件,否则导入的还是旧代码。
方法二:使用ipynb模块直接导入.ipynb文件
如果你不想每次都手动转换文件,可以用专门的工具来导入.ipynb:
- 先安装
ipynb包,在Jupyter的代码单元格里运行:
!pip install ipynb
- 修改
phone.ipynb里的代码(顺便帮你修正了几个小错误):
# 导入.ipynb里的Item类 from ipynb.fs.full.item import Item # 类名按照PEP8规范大写首字母,且要继承Item而非amir class Phone(Item): def __init__(self, name: str, price: float, quantity: int, broken_phone=0): # 调用父类的初始化方法 super().__init__(name, price, quantity) # 断言语句保持不变 assert broken_phone >= 0, f"broken_Phone {broken_phone} should be positive" # 创建实例 phone1 = Phone('jj', 5, 6, 7)
这里要提醒你:你原来的代码里把父类写成了amir,这明显是笔误,应该改成Item;另外Python类名的规范是首字母大写,所以phone改成Phone会更符合行业习惯。
额外注意事项
- 确保两个文件确实在同一个目录下,你可以在
phone.ipynb里运行import os; print(os.getcwd())来查看当前工作目录,确认文件路径是否正确。 - 如果用方法二,要保证
item.ipynb里的Item类是在顶层代码中定义的(没有被嵌套在其他代码块里),否则可能无法正常导入。
内容的提问来源于stack exchange,提问作者Sik Sik
相关产品推荐
相关产品推荐

