У меня есть структура каталогов, аналогичная следующей
meta_project
project1
__init__.py
lib
module.py
__init__.py
notebook_folder
notebook.jpynb
При работе в notebook.jpynb
, если я попытаюсь использовать относительный импорт для доступа к функции function()
в module.py
с помощью:
from ..project1.lib.module import function
Я получаю следующую ошибку
SystemError Traceback (most recent call last)
<ipython-input-7-6393744d93ab> in <module>()
----> 1 from ..project1.lib.module import function
SystemError: Parent module '' not loaded, cannot perform relative import
Есть ли способ заставить это работать, используя относительный импорт?
Примечание. Сервер ноутбука создается на уровне каталога meta_project
, поэтому он должен иметь доступ к информации в этих файлах.
Обратите также внимание, что, по крайней мере, как первоначально предполагалось, project1
не рассматривался как модуль и, следовательно, не имеет файла __init__.py
, это просто предназначалось как каталог файловой системы. Если решение проблемы требует рассмотрения его как модуля и включает в себя файл __init__.py
(даже пустой), это нормально, но этого недостаточно для решения проблемы.
Я разделяю этот каталог между машинами и относительным импортом, позволяя мне использовать один и тот же код везде, и я часто использую ноутбуки для быстрого прототипирования, поэтому предложения, которые предполагают совместное использование абсолютных путей, вряд ли будут полезны.
Изменить: это в отличие от Относительный импорт в Python 3, в котором говорится об относительном импорте в Python 3 в целом и, в частности, о запуске script изнутри каталог пакетов. Это связано с работой в ноутбуке jupyter, который пытается вызвать функцию в локальном модуле в другом каталоге, который имеет как разные общие, так и конкретные аспекты.