Mac下Jupyter Notebook导入Python类文件遇ModuleNotFoundError的解决
解决Jupyter Notebook中导入.ipynb模块的ModuleNotFoundError问题
嘿,这个问题我之前也碰到过——当你把Python脚本转成Jupyter Notebook文件后,直接用普通的import语句肯定会报错,因为Python的模块导入系统默认只识别.py文件,不认.ipynb。下面给你几个实用的解决办法,按推荐程度排序:
方法1:把.ipynb转回.py文件(最稳妥)
这是最直接的方案,相当于回到原来的Python项目结构,同时保留Jupyter的运行环境。你只需要在Jupyter的终端(或者系统终端,先进入项目目录)里执行以下命令:
jupyter nbconvert --to python app_class.ipynb
这个命令会把app_class.ipynb转换成app_class.py文件,之后你原来的from app_class import *语句就能正常工作了。如果有多个.ipynb文件需要转换,可以批量处理:
jupyter nbconvert --to python *.ipynb
方法2:使用import_ipynb模块直接导入.ipynb
如果你不想转回.py文件,也可以用专门的工具来实现.ipynb之间的模块导入:
- 先安装
import_ipynb模块:pip install import-ipynb - 在你的main.ipynb文件开头,先导入这个工具,再导入目标模块:
import import_ipynb from app_class import * if __name__ == '__main__': app = App() app.run()
⚠️ 注意:确保main.ipynb和app_class.ipynb在同一个目录下,如果不在,你需要先把目标文件所在目录添加到Python路径里:
import sys sys.path.append("/path/to/your/app_class_directory") import import_ipynb from app_class import *
方法3:手动读取并执行.ipynb代码(备选方案)
如果上面两种方法都不适用,你可以手动读取app_class.ipynb里的代码并执行,这种方式比较繁琐,但能实现需求:
import nbformat from nbconvert import PythonExporter # 读取app_class.ipynb文件 with open('app_class.ipynb', 'r', encoding='utf-8') as f: notebook = nbformat.read(f, as_version=4) # 将Notebook转换为Python代码 exporter = PythonExporter() code, _ = exporter.from_notebook_node(notebook) # 执行转换后的代码 exec(code) # 现在可以正常使用App类了 if __name__ == '__main__': app = App() app.run()
最后检查一下:确保Jupyter的当前工作目录是你的项目目录,你可以在Notebook里执行%pwd查看,用%cd /path/to/your/project切换目录。
内容的提问来源于stack exchange,提问作者aliiiabniki
相关产品推荐
相关产品推荐

