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

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

本问题已经有最佳答案,请猛点这里访问。

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

1
2
3
4
5
6
7
8
9
10
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移动到currentnotebooks目录或B)将notebook2.ipynb移动到与new_module相同的级别。 我根本不想乱用文件结构。 这可能吗?


您需要确保new_module的父目录位于您的python路径上。 对于低于new_module一级的笔记本,此代码将起到作用:

1
2
3
4
5
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包含''(空字符串),它远离正在运行的解释器的当前目录(在本例中为内核)。 谷歌搜索explain python path对python如何使用PYTHONPATH(又名sys.path)提出了几个很好的解释。