如何将 jupyter notebook 目录中的模块导入到较低目录中的笔记本中?

How do I import module in jupyter notebook directory into notebooks in lower directories?

我用jupyter notebook做数据分析已经有一段时间了。我想在我的 jupyter 笔记本目录中开发一个模块,并能够将该新模块导入到笔记本中。我的jupyter notebook文件目录可以表示如下;

Jupyter notebooks\

    notebook1.ipynb

    new_module\
        __init__.py
        newfunction.py

    currentnotebooks\
        notebook2.ipynb

在 notebook1.ipynb 中使用 import new_module 时有效,但是当我在 notebook2.ipynb 中尝试相同的命令时,我得到以下 ImportError: No module named 'new_module'。两个明显的解决方案是 A) 将 new_module 移动到当前笔记本目录或 B) 将 notebook2.ipynb 移动到与 new_module 相同的级别。我根本不想弄乱文件结构。这可能吗?

您需要确保 new_module 的父目录在您的 python 路径中。对于低于 new_module 一级的笔记本,此代码可以解决问题:

import os
import sys
nb_dir = os.path.split(os.getcwd())[0]
if nb_dir not in sys.path:
    sys.path.append(nb_dir)

如果您在目录层次结构中更靠下,则需要调整 nb_dir 的设置方式,仅此而已。对于 Jupyter notebooks 中的笔记本,您应该 运行 此代码,因为它会将该目录的父目录添加到 python 路径,即可能不受欢迎。

导入 notebook1 的原因是 sys.path 包含 ''(空字符串),它远离 运行ning 解释器的当前目录(内核,在这种情况下)。 google 搜索 explain python path 可以找到关于 python 如何使用 PYTHONPATH(又名 sys.path)的几个很好的解释。