Импортирование модуля проекта в поддиректорию проекта, БЕЗ относительного пути - PullRequest
0 голосов
/ 08 марта 2019

Это должно было запрошено ранее, но я не могу найти его на всю жизнь.

У меня есть структура проекта примерно такая

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().И я чувствую, что должен быть лучший путь.

Так что же лучше здесь делать?

...