07 Июл 2023
2 мин
836

Разбираемся с относительными импортами в Python

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

Содержание

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

Рассмотрим пример. Представим следующую структуру пакета:

my_package/
    __init__.py
    subpackage1/
        __init__.py
        module1.py
    subpackage2/
        __init__.py
        module2.py

Если необходимо импортировать функцию из module1.py в module2.py, то можно сделать это с помощью относительного импорта следующим образом:

from ..subpackage1.module1 import my_function

Две точки в начале пути означают, что импорт будет производиться из родительского каталога текущего пакета.

Однако, при работе с относительными импортами, часто возникает ошибка ImportError: attempted relative import with no known parent package. Это означает, что Python не смог определить, к какому пакету относится текущий модуль, и не знает, откуда начинать относительный импорт.

Понятие «пакет» в Python означает каталог, содержащий файл __init__.py и другие модули. Пакет позволяет группировать связанные модули вместе, обеспечивая удобную организацию кода.

Чтобы избежать ошибки с относительными импортами, необходимо убедиться, что текущий модуль является частью пакета. Это можно сделать, запустив Python с ключом -m и указав полное имя модуля. Например, если файл module2.py находится в пакете my_package.subpackage2, его следует запускать следующим образом:

python -m my_package.subpackage2.module2

Такой подход позволит Python корректно определить позицию модуля в иерархии пакета и успешно выполнить относительный импорт.

Добавить комментарий