У меня есть структура каталогов, подобная следующей
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 в целом и, в частности, о запуске сценария из каталога пакета. Это связано с работой в записной книжке jupyter, пытающейся вызвать функцию в локальном модуле в другом каталоге, который имеет как разные общие, так и частные аспекты.
lib
справочнике.
__init__
файлы в каталоге вашего пакета?