Как импортировать модуль в Jupyter notebook directory в ноутбуки в нижних каталогах? [дубликат]

этот вопрос уже есть ответ здесь:

  • импорт локальной функции из модуля, размещенного в другом каталоге с относительным импортом в Jupyter notebook с помощью python3 3 ответы

я использовал Jupyter notebook для анализа данных довольно давно. Я хотел бы разработать модуль в моем ноутбуке jupyter каталог и иметь возможность импортировать этот новый модуль в ноутбуки. Мой каталог файлов Jupyter notebook можно представить следующим образом;

Jupyter notebooks

    notebook1.ipynb

    new_module
        __init__.py
        newfunction.py

    currentnotebooks
        notebook2.ipynb

при использовании import new_module в notebook1.ipynb работает, однако, когда я пытаюсь выполнить ту же команду в notebook2.ipynb я получаю следующее ImportError: No module named 'new_module'. Два очевидных решения: а) переместить new_module в каталог currentnotebooks или Б) переместить notebook2.ipynb до того же уровня, что и new_module. Я вообще не хочу возиться с файловой структурой. Есть это возможно?

1 ответов


вам нужно убедиться, что родительский каталог 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.Путь содержит '' (пустая строка), которая всегда является текущим каталогом работающего интерпретатора (в данном случае ядра). Поиск в google для explain python path появляется несколько хороших объяснений того, как python использовал PYTHONPATH (он же sys.path).