Jupyter Notebook中%run执行ipynb后无法导入类的问题求助
问题:Jupyter Notebook无法从.ipynb文件导入类
我在Jupyter Notebook中尝试从同一目录(桌面)的Coursera_test.ipynb调用create.ipynb里定义的Animals类,遇到了模块找不到的问题。
相关代码
create.ipynb中的代码:
class Animals: def __init__(self, animal, age, colour): self.animaled= animal self.ageed= age self.coloured= colour self.cuteness= "the cutest" def move(self): print(f"The {self.animaled} is moving") def stop (self): print (f"The {self.animaled} has stopped")
Coursera_test.ipynb中的代码:
%run "create.ipynb" from create import Animals
报错信息
%run命令执行无报错,但执行from create import Animals时出现:
----> 1 from create import Animals ModuleNotFoundError: No module named 'create'
试过用绝对路径执行%run仍报错,将create.ipynb导出为create.py后可正常导入,拼写等问题已排查,求解决方法。
原因分析
- Python的
import机制仅支持加载.py格式的模块文件,.ipynb是Jupyter的笔记本格式,不属于标准Python模块范畴,因此直接用from ... import ...会找不到模块。 %run是Jupyter专属的魔法命令,它会执行.ipynb文件内的所有代码,执行完成后Animals类已经被加载到当前Notebook的内核命名空间中,不需要再重复导入。
解决方法
方法1:直接使用%run加载的类
删除from create import Animals这一行,直接使用已经加载到命名空间的Animals类即可:
%run "create.ipynb" # 直接创建类实例使用 my_cat = Animals("cat", 2, "white") my_cat.move()
方法2:将.ipynb转为.py文件导入
如果必须使用import语法,把create.ipynb导出为.py文件:
- 在Jupyter Notebook界面中,点击「文件」→「下载为」→「Python(.py)」,生成
create.py文件 - 之后正常导入即可:
from create import Animals my_dog = Animals("dog", 3, "brown") my_dog.stop()
方法3:用命令行工具自动转换(适合频繁更新的场景)
如果需要经常更新create.ipynb的内容,可以用nbconvert工具在命令行快速转换:
jupyter nbconvert --to python create.ipynb
转换完成后,再执行from create import Animals就能正常导入类。
内容的提问来源于stack exchange,提问作者confused_researcher
相关产品推荐
相关产品推荐

