Подтвердить что ты не робот

"Попытка относительного импорта в не-пакет", хотя пакеты с __init__.py в одном каталоге

У меня есть модуль с именем extended.py, который содержит следующую строку:

from .basic import BasicModule

а файл basic.py находится в том же каталоге, что и __init__.py. Однако, когда я пытаюсь запустить его как:

python extended.py

Я получаю сообщение об ошибке:

ValueError: Attempted relative import in non-package

Также добавление строки:

from __future__ import absolute_import

не решает проблему. Может быть, я слишком устал, чтобы увидеть очевидное - но я не вижу здесь проблемы.

4b9b3361

Ответ 1

Относительный импорт работает только для пакетов, но при импорте в extended.py вместо этого выполняется модуль верхнего уровня.

В текущем каталоге может храниться файл __init__.py, но он еще не делает часть exended.py пакета.

Чтобы что-то считалось пакетом, вам нужно вместо этого импортировать имя каталога. Было бы выполнено следующее:

main.py

packagename\
    __init__.py
    basic.py
    extended.py

затем в main.py поместите:

import packagename.extended

и только затем extended часть пакета и работа с относительным импортом.

Относительный импорт теперь имеет что-то относительное, родитель packagename.