从另一个Jupyter笔记本导入函数

26

我正在尝试从另一个Jupyter笔记本中导入一个函数。

在n1.ipynb文件中:

def test_func(x):
  return x + 1
-> run this
在 n2.ipynb 中:
%%capture
%%run n1.ipynb
test_func(2)

错误:

NameError Traceback (most recent call last)<ipython-input-2-4255cde9aae3> in <module>()
----> 1 test_func(1)

NameError: name 'test_func' is not defined

有什么简单的方法可以做到这一点吗?


@AChampion,是的,它没有起作用。 - data_person
1
抱歉,我已经设置好了,所以对我有效 - 指令在这里:导入笔记本 - AChampion
4个回答

25

nbimporter模块可以帮助我们:

pip install nbimporter

例如,假设在此目录结构下有两个笔记本电脑:

/src/configuration_nb.ipynb

analysis.ipynb

/src/configuration_nb.ipynb:

class Configuration_nb():
    def __init__(self):
        print('hello from configuration notebook')

分析.ipynb:

import nbimporter
from src import configuration_nb

new = configuration_nb.Configuration_nb()

输出:

Importing Jupyter notebook from ......\src\configuration_nb.ipynb
hello from configuration notebook
我们也可以从Python文件中导入并使用模块。 /src/configuration.py
class Configuration():
    def __init__(self):
        print('hello from configuration.py')

分析.ipynb:

import nbimporter
from src import configuration

new = configuration.Configuration()

输出:

hello from configuration.py

有没有办法自动运行你正在工作的笔记本中的所有函数定义?'%run notebook.ipynb'会起作用吗? - BND
这可能不再起作用了,我在Colab和本地上尝试过,但无法完成。 - Andres Mitre
这允许访问在另一个笔记本中定义的类的属性。它似乎不允许访问在那里定义的任意变量,例如configuration_nb.my_variable。 - Stefan
值得注意的是,nbimporter的创建者已经建议不再使用nbimporter了。https://github.com/grst/nbimporter#update-2019-06-i-do-not-recommend-any-more-to-use-nbimporter - pwb2103
还有importnbipynb,请查看这里 - Wayne
还有importnbipynb,请查看这里 - undefined

1

我曾经做的一件事情是将函数导入到Jupyter笔记本中,方法是将函数写在单独的Python .py文件中,然后在笔记本中使用魔法命令%run。以下是至少一种实现方式的示例:

notebook.ipynb和helper_functions.py都在同一个目录下。

helper_functions.py:

def hello_world():
    print('Hello world!')

notebook.ipynb:

%run -i helper_functions.py
hello_world()

notebook.ipynb 输出:

Hello world!

%run命令告诉笔记本运行指定的文件,-i选项在IPython名称空间中运行该文件,在这个简单的示例中并没有真正有意义,但如果您的函数与笔记本中的变量交互,则非常有用。如果我没有为您提供足够的详细信息,请查看文档

值得一提的是,我还尝试在外部.ipynb文件中运行函数定义,而不是在外部.py文件中运行,这对我很有效。如果您想将所有内容保留在笔记本中,这可能值得探索。


0

基于 Kurt 的答案:

%run -i configuration.ipynb

这将运行另一个笔记本,在下一个单元格中,您可以访问该笔记本定义的变量。


0

这对我有效

from some_dir.pythonFile import functionName
%run ./some_dir/pythonFile.py

这个也可以工作:

%load_ext autoreload
%autoreload 2
from some_dir.pythonFile import functionName

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