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