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

Jam*_*per 22 python ipython python-import python-3.x jupyter-notebook

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

Jupyter notebooks\

    notebook1.ipynb

    new_module\
        __init__.py
        newfunction.py

    currentnotebooks\
        notebook2.ipynb
Run Code Online (Sandbox Code Playgroud)

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

cco*_*cco 38

您需要确保父目录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)
Run Code Online (Sandbox Code Playgroud)

如果您在目录层次结构中更进一步,则需要调整nb_dir设置的方式,但这就是全部.你应该不是在运行的笔记本电脑这个代码Jupyter notebooks,因为这将是目录的父目录添加到Python路径中,这可能是不可取的.

导入的原因notebook1是sys.path包含''(空字符串),它远离正在运行的解释器的当前目录(在本例中为内核).谷歌搜索找到explain python path了python如何使用PYTHONPATH(又名sys.path)的几个很好的解释.