Импорт модулей из подкаталогов - python - PullRequest
0 голосов
/ 26 марта 2020

Я хотел бы импортировать модули из подкаталогов простым способом:

Я хотел бы вызвать все функции в app.py

.
├── app.py
└── testsubdir
    └── testsubsubdir
        ├── utils.py
testsubdir2
└── testsubsubdir2
    ├── utils2.py

Для этого я использую сейчас :

sys.path.append('/home/www/testsubdir/testsubsubdir')
sys.path.append('/home/www/testsubdir2/testsubsubdir2')
from utils import <some_function>
from utils2 import <some_function>
  1. Есть ли способ получить / home / www as основной путь скрипта вызова python, поэтому мне не нужно писать его каждый раз. Что-то вроде этого? sys.path.append ('$ MAINPATH.' / testsubdir2 / testsubsubdir2 ')
  2. Есть ли способ указать, что нужно поместить все подкаталоги из root проекта / home / www to в sys. путь, поэтому они используются для включения библиотек?

1 Ответ

0 голосов
/ 26 марта 2020

Для относительного импорта вы можете просто сделать from testsubdir.testsubsubdir import utils.

Для случая с «братом» это немного сложнее. Вы можете использовать sys.path.append(path) (или sys.path.insert(0, path), но это не очень хорошее решение. Для лучшей альтернативы я бы сослался на этот пост монстра.

Так что для ваших вопросов 1, Вы могли бы (с уродливым хаком) сделать os.path.append(os.path.dirname(os.path[0])).

...