Ошибки в коде — неотъемлемая часть процесса программирования. Одной из распространенных ошибок, с которой сталкиваются начинающие разработчики на Python, является ошибка «Attempted relative import in non-package». Эта ошибка происходит при попытке импортировать модуль с использованием относительного пути. В качестве примера рассмотрим следующую структуру каталогов:
my_package/
__init__.py
my_sub_package/
my_module.py
__init__.py
my_tests/
test_my_module.py
__init__.py
В файле test_my_module.py
попробуем импортировать my_module.py
следующим образом:
from ..my_sub_package.my_module import MyFunction
При запуске test_my_module.py
возникнет ошибка «Attempted relative import in non-package».
Данная ошибка возникает, потому что Python ожидает, что относительный импорт будет выполнен в контексте пакета. При запуске скрипта напрямую Python не распознает его как часть пакета, даже если он физически находится внутри структуры пакета.
Решение проблемы
Есть несколько способов решить проблему. Один из них — использовать абсолютный импорт, указав полный путь от корня проекта:
from my_package.my_sub_package.my_module import MyFunction
Другой способ — запускать скрипт с использованием модуля -m
из командной строки. Этот способ позволяет Python распознать структуру пакета корректно:
python -m my_package.my_tests.test_my_module
Таким образом, при возникновении ошибки «Attempted relative import in non-package» стоит проверить, корректно ли указан путь при импорте модуля, а также убедиться, что скрипт запускается как часть пакета.
Добавить комментарий