如何从一个Jupyter Notebook运行另一个.ipynb文件并获取返回值?
如何从一个Jupyter Notebook运行另一个并获取返回值
哈哈,这个需求我太熟了!直接用%run ./called_notebook.ipynb确实没法直接把返回值赋值给变量,但有两个实用的办法能搞定:
方法1:用%run -i结合全局变量传递
这个方法适合你想完整运行被调用Notebook的所有代码,同时捕获指定结果的场景:
- 修改被调用的Notebook:把你需要返回的值存到一个全局变量里,比如
called_notebook.ipynb的代码改成:
def foo(): print(1) return 2 # 将函数返回值存入全局变量 notebook_output = foo()
- 在当前Notebook调用并获取值:用
-i参数运行被调用Notebook,这个参数会让被调用Notebook共享当前Notebook的命名空间,之后直接访问全局变量即可:
%run -i ./called_notebook.ipynb # 现在就能拿到返回值了 a = notebook_output print(a) # 输出:2
方法2:把Notebook当作模块导入(更灵活)
如果只是想调用被调用Notebook里的特定函数,这种模块化的方式更合适:
- 安装依赖库:先装
import-ipynb,它能让你直接导入.ipynb文件作为Python模块:
pip install import-ipynb
- 被调用Notebook保持原有结构:不用额外修改,比如
called_notebook.ipynb还是:
def foo(): print(1) return 2
- 在当前Notebook导入并调用:
import import_ipynb # 直接导入被调用的Notebook import called_notebook # 调用函数并获取返回值 a = called_notebook.foo() print(a) # 输出:2
两种方法各有侧重:方法1适合需要完整运行目标Notebook所有代码的场景,方法2更适合模块化复用函数,按需调用。
内容的提问来源于stack exchange,提问作者Valentin Fabianski
相关产品推荐
相关产品推荐

