从另一个.ipynb文件中导入函数

75

我在名为 "functions.ipynb" 的文件中定义了一个 "hello world" 函数。现在,我想通过使用 "import functions" 在另一个文件中导入函数。我确定它们在同一个文件夹中。然而,它仍然显示 "ImportError: No module named functions"。顺便说一下,我正在使用jupyter笔记本。非常感谢!


4
可能是 ipynb import another ipynb file 的重复问题。 - mx0
5个回答

101

您需要使用ipynb包/模块导入器。 您需要安装它:pip install ipynb

创建一个名为my_functions.ipynb的笔记本。 向其中添加一个简单的函数。

def factorial(n):
    if n == 0:
        return 1
    else:
        return n * factorial(n-1)

然后,创建第二个IPython Notebook并使用以下代码导入此函数:

from ipynb.fs.full.my_functions import factorial

然后您可以像在同一个IPython笔记本中一样使用它:

testing = factorial(5)

请参阅文档以获取更多详细信息。


1
这对我不起作用,我总是收到这个错误 KeyError: 'package'。我用于笔记本的环境是Azure Databricks和Python 3。有解决方法可以修复吗? - HEART94
12
如果 my_functions 包含了一些你不想执行的代码,但只需要文件中的某个函数怎么办? - Milos
10
@Milos,然后按照此处的文档使用import ipynb.fs.defs.my_functions导入我的函数。https://github.com/ipython/ipynb - racoon_lord
@racoon_lord 我正在使用相同的语法只导入函数定义。虽然在.ipynb文件中这个操作是有效的,但由于某些原因我必须将我的第二个Python笔记本文件转换成.py格式。但是这次,它执行了第一个Notebook的所有代码(包括我不想执行的代码),而不仅仅是我想要调用的函数。有解决方法吗? - Programmer
实际上,在第一个文件中,我正在执行机器学习,而从第二个文件中,我正在执行函数以检查预测结果。(不想再次运行训练部分。) - Programmer
显示剩余3条评论

9

对于我的情况,ipnyb导入不起作用,不知何故。我必须使用Jupyter笔记本魔术单元格来导入我的函数。

%run MyOtherNotebook.ipynb     #this is were my function was stored
function(df)                    #then simply run the function

5
你可以将 functions.ipynb 另存为 functions.py,并且可以使用 import functions 导入该文件。现在,你可以使用 functions 文件中定义的任何函数,例如:functions.function_name。例如,如果 add 是一个函数,
functions.add(5,3)

导入后将起作用。


4

@David Rinck的回答解决了问题,但我建议您添加样板__name__ == "__main__"来保护您不想意外调用的脚本。它与通常的Python文件相同

如果一个 .ipynb 文件 a.ipynb 被另一个 b.ipynb 导入

from ipynb.fs.full.a import factorial

在a.ipynb文件中,__name__将会是ipynb.fs.full.a,而不是"__main__"


1
你可以使用@David Rinck提供的解决方案,但要注意你从中导入函数的ipynb文件将作为一个整体运行。因此建议文件没有任何运行的代码,只有你可能需要的函数。 我自己尝试过,同样的事情也发生在我身上。 我采用的一个简单的解决方案就是做一个包含所需函数的.py文件,然后从该文件中导入函数。

这并没有回答问题。一旦您拥有足够的声望,您将能够评论任何帖子;相反,提供不需要询问者澄清的答案。- 来自审核 - xlmaster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接