解决Jupyter Notebook中.py与.ipynb文件的Import问题

一颗松果
一颗松果
发布时间:2026-10-13 | 4人浏览过
原创

本文详解如何在Jupyter Notebook中处理.py与.ipynb文件的相互调用。通过将.ipynb转换为.py模块实现跨文件导入,并解决代码修改后需手动重载模块的问题,优化开发流程与工程结构。

Jupyter Notebook文件格式与导入限制

Jupyter Notebook默认以JSON格式保存文件,因此生成的扩展名为.ipynb而非.py。由于.ipynb文件无法直接通过import语句导入到.py或另一个.ipynb文件中,这给开发工作带来了显著不便。在Jupyter环境中,只有在默认的.ipynb格式下才能享受自动补全、交互式控制台等特性支持;若转为.py文件,则只能依赖文本编辑器进行修改,操作体验较差。

将.ipynb转换为.py模块的方法

鉴于.ipynb文件可以导入.py模块,一种可行的解决方案是将已编写好的.ipynb模块转换为.py文件。在目标.ipynb文件的末尾新建一个Cell,并输入以下转换代码:


try:  
  !jupyter nbconvert --to python file_name.ipynb
  # python即转化为.py,script即转化为.html
  # file_name.ipynb即当前module的文件名
except:
  pass

执行上述代码后,当前目录下会生成一个与源文件同名的.py文件,该模块即可在其他.ipynb文件中被导入使用。需要注意的是,转换生成的.py文件中可能会残留用于转换的代码。若希望彻底避免这种情况,建议单独创建一个转换脚本,集中管理所有文件的转换指令。

在.ipynb中调用.py文件的项目管理

补充知识:Jupyter Notebook的项目管理——在.ipynb中调用.py文件

在进行课题研究或数据挖掘竞赛时,Python是常用语言。通常的做法是在服务器终端执行命令“jupyter notebook --ip 0.0.0.0”启动Jupyter Notebook后台服务,随后在本地Windows电脑的浏览器中访问该服务端地址,从而编写Python代码。

将.ipynb与.py结合使用,可以使Jupyter Notebook的工程目录结构更加清晰。例如,将一些通用函数定义在.py文件中,当需要在.ipynb中调用这些函数时,只需将其导入即可执行。

模块调用与重载示例

那么,如何在.ipynb中调用同目录下的.py文件呢?

以下是一个具体示例:

假设在同一目录下存在“call_hello.ipynb”和“hello.py”两个文件:

在“hello.py”中定义了一个名为hello的函数,代码如下:

def hello(): print('say hello');

在“call_hello.ipynb”中调用hello()函数:

from hello import * hello()

输出结果为:say hello

然而,如果修改了.py文件中的代码,必须在.ipynb中重新加载模块,更改才会生效。

假设将“hello.py”中的代码修改为:

def hello(): print('say hello,bye');

此时在“call_hello.ipynb”中再次调用hello()函数,输出结果依然为:say hello

需要重新导入hello模块:


from imp import reload
reload(hello)
hello()

此时输出结果变为:say hello, bye

成功!

以上关于解决Jupyter Notebook中.py与.ipynb文件Import问题的内容分享给各位,希望能提供参考。欢迎大家多多支持本站。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表