«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему Python выдает ошибку «ValueError: попытка относительного импорта за пределы пакета верхнего уровня» и как ее можно избежать?

Почему Python выдает ошибку «ValueError: попытка относительного импорта за пределы пакета верхнего уровня» и как ее можно избежать?

Опубликовано 17 ноября 2024 г.
Просматривать:485

Why Does Python Throw a \

Относительный импорт за пределы пакета верхнего уровня

При попытке относительного импорта в многоуровневом пакете Python запуск модуля из каталога пакета может привести к ошибке «ValueError: попытка относительного импорта за пределы пакета верхнего уровня». Понимание причины этой ошибки имеет решающее значение для эффективного управления пакетами.

Ошибка возникает из-за того, что Python не ведет учет того, откуда загружаются пакеты. Выполнение модуля как «python -m test_A.test» по сути сообщает Python, что test_A.test не находится внутри пакета (несмотря на то, что он находится в package/test_A). Следовательно, попытка «из ..A import foo» становится недействительной, поскольку Python не знает, что test_A является частью более крупного пакета.

Напротив, использование «python -m package.test_A.test» сохраняет иерархическую структуру. и позволяет успешно разрешить «from ..A import foo». Это точно отражает тот факт, что test_A является дочерним каталогом внутри загруженного пакета «пакет».

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

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3