Одной из особенностей языка программирования Python является возможность использования относительных импортов. Это означает, что при импортировании модуля или пакета, Python позволяет указать путь к нему относительно текущего модуля.
Освойте Python на курсе от Skypro. Вас ждут 400 часов обучения и практики (достаточно десяти часов в неделю), подготовка проектов для портфолио, индивидуальная проверка домашних заданий и помощь опытных наставников. Получится, даже если у вас нет опыта в IT.
Рассмотрим пример. Представим следующую структуру пакета:
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
На курсе Skypro «Python-разработчик» освоите основные инструменты программирования, получите опыт на реальных проектах и сможете стартовать в профессии уверенным новичком. Преподаватели — практикующие программисты с большим опытом, а в центре карьеры помогут составить цепляющее резюме и подготовиться к собеседованию.
Такой подход позволит Python корректно определить позицию модуля в иерархии пакета и успешно выполнить относительный импорт.
Добавить комментарий