Вебинары Разобраться в IT Реферальная программа
Программирование Аналитика Дизайн Маркетинг Управление проектами
7 профессий по цене одной
07:05:47:06
дн. ч. мин. сек.
30 Мар 2024
2 мин
177

Решение ошибки «Attempted relative import in non-package» в Python

Ошибки в коде — неотъемлемая часть процесса программирования. Одной из распространенных ошибок, с которой сталкиваются начинающие разработчики

Ошибки в коде — неотъемлемая часть процесса программирования. Одной из распространенных ошибок, с которой сталкиваются начинающие разработчики на 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» стоит проверить, корректно ли указан путь при импорте модуля, а также убедиться, что скрипт запускается как часть пакета.

Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей

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