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