Это должно было запрошено ранее, но я не могу найти его на всю жизнь.
У меня есть структура проекта примерно такая
ROOT
├── README.md
├── modules
│ ├── __init__.py
│ ├── mod1.py
│ └── mod2.py
├── tests
│ ├── test_mod1.py
│ └── test_mod2.py
├── notebooks
│ ├── nb1.ipynb
│ ├── nb2.ipynb
│ └── sub_dir
│ ├── sub_nb.ipynb
│ ├── generate_py
│ └── py_files
│ └── sub_nb.py
├── definitions
└── main.py
Так что из main.py
я могу импортировать что угодно из definitions
или любой модуль из ROOT/modules
.
Я хочу иметь возможность импортировать их из любого места в дереве каталогов notebooks
.Я знаю, что мог бы сделать это, используя:
import sys
sys.path.append("..")
Но дерево каталогов notebooks
имеет много слоев, и я не хочу, чтобы мой код начал выглядеть так:
import sys
sys.path.append("../../../../")
Более того, файл generate_py
представляет собой bash-скрипт, который преобразует блокноты jupyter (.ipynb
) в .py
файлы и сохраняет файлы .py
в подкаталоге ./py_files
.
При использовании вышеописанного метода мне приходится вручную редактировать каждый файл, чтобы добавить ../
в sys.append()
.Это раздражает.
Если я запускаю файлы из pycharm, все работает хорошо (я предполагаю, что это обновляет вашу PYTHONPATH, чтобы включить корень проекта при создании main.py
?)
Для дальнейшегоусложняем, этот проект запускается на нескольких машинах, которые делятся через git.Так что абсолютные ссылки отсутствуют.
Но, работая с терминала или изнутри jupyter, он не может связывать модули или определения без прохождения процесса sys.append()
.И я чувствую, что должен быть лучший путь.
Так что же лучше здесь делать?