导入Jupyter笔记本作为模块:路径问题

时间:2016-06-22 15:38:38

标签: python module path ipython jupyter

我正在尝试将一些Jupyter笔记本加载为模块。 Jupyter对如何做到这一点有很好的指导here。我已经复制了notebook_import.pyfull script on github)中所有必要的函数和类,并从中加载了所有函数和类。然后我可以导入笔记本,它可以工作:

# import functions and classes to make notebooks importable
from notebook_import import *

以下笔记本包含打印foo()

的测试功能"bar"
import notebook_import_test
[out]: importing Jupyter notebook from notebook_import_test.ipynb

notebook_import_test.foo()
[out]: bar

但是,由于某种原因,这只适用于我尝试导入的笔记本与我要导入的笔记本相同的文件夹。如果我将笔记本放在我常用的模块文件夹中(即我将我的*.py文件放在函数中以便稍后加载它们的模块),它会显示No module named notebook_import_test。我对路径管理以及Python如何查找模块以了解如何使笔记本电脑的工作与*.py导入相同,以便笔记本从另一个专用于模块的文件夹加载。

有什么建议吗?

P.S。我的操作系统是Win10。

2 个答案:

答案 0 :(得分:2)

两行代码的简单解决方案

使用python中的'nbimporter'包在笔记本B中导入另一个笔记本A(或其功能)。您可以使用命令安装'nbimporter' - pip install nbimporter

假设有两个笔记本 A.ipynb 和 B.ipynb。我们正在尝试在 B 中导入 Notebook A(或其功能) 下面的代码示例应该可以解决问题。

内部笔记本 B.ipynb

import nbimporter
import A  # or do this --> from A import func1

答案 1 :(得分:1)

[我添加此作为答案,因为作为评论格式不足以解释我的评论。我猜也许这不是一个好的答案]。

我想你是从其他笔记本上这样做的。如果您在文件夹上启动jupyter(您在win10上),例如,在文件夹内:

C:\my_notebooks

您要导入的笔记本位于另一个不在 C:\ my_notebooks 文件夹中的文件夹中,例如 C:\ dir_with_the_nb_to_import

C:
├───my_notebooks       # Here you starter jupyter, > jupyter notebook
│   ├───notebooks      # so you have access to all the info in the folder
│   │   └───data
│   └───utils
├───dir_with_the_nb_to_import    # this folder is not inside my_notebooks
    └───notebook_to_import.ipynb # so maybe the problem is that it is not accesible

然后jupyter不允许您找到该文件,因为您只能访问您启动jupyter服务器所在位置的文件。

我不知道在这种情况下,将 C:\ dir_with_the_nb_to_import 包含在sys.path是否会有所帮助:

import sys
sys.path.append(r'C:\dir_with_the_nb_to_import')

[编辑]:查看链接文件后,似乎以下列方式更改this line

在:

for d in path:

后:

for d in sys.path:

通过这种方式,它会在sys.path中查找笔记本,因此您应该将笔记本所在的位置添加到sys.path