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