我正在尝试将一些Jupyter笔记本加载为模块。 Jupyter对如何做到这一点有很好的指导here。我已经复制了notebook_import.py
(full 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。
答案 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
。