总结
使用 %run 魔法命令 | 将 Notebook 转换为py文件 | 使用 nbimporter 库 | 手动复制代码 | |
---|---|---|---|---|
优点 | notebook最前面加上即可 | 最基本方法 | 就跟导入py文件一样,不会被执行一遍 | 快 |
缺点 | 所有的代码都会执行一遍 | 修改原文件就要重新转换,且 从自定义的 .py 文件中导入函数时,Python 会执行该文件中的顶层代码。 | ipynb文件中有不可执行的文字,就会出错 | 麻烦 |
最佳 | √ |
方法 1:使用 %run 魔法命令
Jupyter Notebook 提供了 %run 魔法命令,允许你运行另一个 Notebook,其效果类似于 Python 脚本。运行后,你可以访问那个 Notebook 中定义的变量、函数等。
在目标 Notebook 中,确保你已经定义了需要的函数,例如:
# 在 some_other_notebook.ipynb 中
def my_function():print("Hello from another notebook!")
然后,在你的当前 Notebook 中,使用 %run 来执行另一个 Notebook:
# 在你的当前 Notebook 中
%run ./path_to/some_other_notebook.ipynb# 现在可以调用函数
my_function() # 这将打印 "Hello from another notebook!"
确保路径是相对于当前 Notebook 的路径或者是一个绝对路径。
方法 2:将 Notebook 转换为模块
另一种方法是将你想要调用的 Notebook 转换为一个 Python 模块(.py 文件),然后像导入普通 Python 模块那样导入它。
首先,将 Notebook 导出为 Python 脚本。这通常可以在 Jupyter Notebook 的 “File” > “Download as” > “Python (.py)” 中完成。
将导出的 .py 文件放在当前 Notebook 可以访问的位置(或添加该路径到 sys.path)。
导入模块并调用函数:
# 导入模块
import some_other_notebook_module # 确保 some_other_notebook_module.py 在可访问的路径上# 调用函数
some_other_notebook_module.my_function()
两种方法各有利弊:使用 %run 更适合临时或交互式的工作,而将 Notebook 转换为模块则更适合长期和重复使用的代码。选择哪种方法取决于你的具体需求和工作流程。
注意!
从自定义的 .py 文件中导入函数时,Python 会执行该文件中的顶层代码。这意味着在模块级别(不在任何函数或类定义内部)的所有语句都会在导入时运行。这包括函数和类的定义、变量赋值,以及任何在顶层执行的其他语句。
防止代码在导入时运行
如果你想防止某些代码在模块被导入时执行,可以将这部分代码放入以下检查中:
if __name__ == "__main__":# 这里的代码只会在直接运行此脚本时执行,而不会在导入时执行
这种方式常用于模块的测试代码或当脚本既可以被导入又可以作为主程序运行时。
方法 3:使用 nbimporter
nbimporter 是一个 Python 库,允许直接从其他 Jupyter Notebook 中导入 Python 代码。首先,您需要安装 nbimporter:
pip install nbimporter
然后,您可以在您的 Notebook 中导入另一个 Notebook,就像导入一个常规的 Python 模块一样:
import nbimporter
from some_other_notebook import my_functionmy_function()
在这个示例中,some_other_notebook 是您要导入的 Notebook 的文件名(不包括 .ipynb 扩展名),my_function 是定义在该 Notebook 中的函数。
如何筛查是否有不可执行的文字
先利用jupyter notebook文件的download as 转为py,然后
from py_name import *
看下是否有导入错误
方法 4:手动复制代码
对于较小的项目或临时工作,最简单直接的方法可能就是手动复制所需的函数或代码段。这种方法虽然不够优雅,但对于快速实验和原型设计来说是有效的。