Пакеты Python: относительный импорт

Я работаю над приложением Python, состоящим из ядра и нескольких независимых модулей с использованием ядра. У меня возникли трудности с настройкой относительного импорта пакетов.

app
  |- __init__.py
  |- core
        |- __init__.py
        |- corefile.py

  |- module1
        |- __init__.py
        |- main.py

Файлы __init__.py пусты. Я запускаю Python 2.7.1.

main.py
from .core import *

Запуск python main.py приводит к ValueError: Attempted relative import in non-package.

Похожие вопросы: Окончательный ответ на относительный импорт python, Как сделать относительный импорт в Python?, Относительный импорт в Python

Спасибо за помощь.

Ответ 1

Короче говоря, вы можете использовать только относительный импорт из самих импортированных пакетов.

Например, если у вас есть:

$ cat run.py
from app.module1 import main
main.main()
$ python run.py

Затем вы можете использовать относительный импорт в app/module1/main.py (хотя это должно быть from ..core import foo, потому что core/ - один уровень выше main.py).

Ответ 2

import sys
abs_filepath = '/home/n/Documents/IMPORTANT/deep_learning/drori_2018/    final_proj/Ryans_branch/StackGAN/'
# insert your absolute filepath above as abs_filepath = '/path/to/targ/dir'
sys.path.append(abs_filepath)

Пожалуйста, исправьте это, если есть проблемы с выполнением import таким образом

Также см. здесь, чтобы получить исчерпывающий ответ о том, что происходит.