如何从另一Jupyter Notebook中导入函数?求解报错问题
解决Jupyter Notebook跨文件导入函数的NameError问题
这个问题我之前踩过坑,核心原因是%%run默认会在独立的临时命名空间里执行目标notebook的代码——也就是说,你在n1里定义的test_func其实只存在于那个临时空间里,不会自动跑到n2的主命名空间来,加%%capture只是捕获了运行输出,根本没解决变量/函数共享的问题。给你几个简单直接的解决办法:
方法1:用%run -i命令(最简便,无需额外工具)
-i参数会强制让目标notebook在当前notebook的命名空间里执行,这样定义的函数就会直接加载进来。修改n2里的代码如下:
%%capture %run -i n1.ipynb # 现在调用就没问题了 test_func(2) # 返回3
注意这里用单百分号%run或者双百分号%%run都可以,核心是加-i参数。
方法2:把ipynb转成py文件导入
Jupyter本身支持把notebook导出为Python脚本:
- 打开n1.ipynb,在菜单栏选择
File > Download as > Python (.py) - 在n2里直接导入:
from n1 import test_func test_func(2)
如果不想手动导出,也可以在n2里用命令行自动转换(需要安装nbconvert,默认Jupyter环境一般都有):
!jupyter nbconvert --to python n1.ipynb
执行完再按上面的方式import即可。
方法3:用import_ipynb库直接导入ipynb文件
这个库专门用来解决跨notebook导入的问题,步骤如下:
- 先安装库:
!pip install import-ipynb
- 在n2里导入并使用:
import import_ipynb import n1 # 调用方式1 n1.test_func(2) # 调用方式2:直接导入函数 from n1 import test_func test_func(2)
内容的提问来源于stack exchange,提问作者data_person
相关产品推荐
相关产品推荐

