Запуск пакета из внешнего каталога - проблема с импортом

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

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

__main__.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 для правильной работы пакета, или может быть существует другое решение этой проблемы?

0 ответов

Другие вопросы по тегам