Запуск пакета из внешнего каталога - проблема с импортом - PullRequest
0 голосов
/ 05 января 2019

У меня есть пакет:

mypkg
|-- __init__.py
|-- __main__.py
|-- mod1.py

__ __ основной. Ру

from mypkg import mod1

def main():
    print("Hello from mypkg main!")
    print(mod1.mod1_msg())

if __name__ == '__main__':
    main()

Файл __init__.py пуст.

Мне нужно запустить mypkg по указанному пути, например:

python -m mypath.mypkg

Когда я запускаю mypkg таким образом, я получаю ошибку:

ImportError: cannot import name 'mod1' from 'mypkg' (unknown location)

Эту проблему можно решить, изменив from mypkg import mod1 на from . import mod1, но PEP8 рекомендует абсолютный импорт по сравнению с относительным импортом.

Другое решение, которое я нашел, это добавить:

import sys
from os import path

sys.path.append(path.dirname(path.dirname(path.abspath(__file__))))

до __init__.py файл

Тогда все отлично работает.

Итак, вопрос в том, что является лучшим решением? Использование относительного импорта или манипулирование sys.path для правильной работы пакета или, может быть, существует другое решение этой проблемы?

...