#python #import #importerror
#python #импорт #ошибка импорта
Вопрос:
Итак, у меня есть приложение со структурой:
main.py
core/__init__.py
core/user_interface.py
core/util/__init__.py
core/util/widgets/__init__.py
core/util/widgets/tab.py
The main.py файл выполняет импорт:
from core import user_interface
Это выполняется успешно, затем user_interface выполняет вызов import:
import core.util.widgets.tab
Файл tab.py затем выполняется вызов импорта:
from core import user_interface
Этот последний импорт завершается ошибкой и возвращает ошибку:
ImportError: cannot import name user_interface
Выполнение приложения или попытки импортировать модуль user_interface из терминала завершаются ошибкой, поскольку цепочка импорта прерывается. Я знаю, что где-то я совершаю очень элементарную ошибку, но я почти на пределе своих возможностей с этим. Если кто-нибудь может помочь решить эту проблему, я был бы очень благодарен.
Ответ №1:
Я только что столкнулся с точно такой же проблемой, но она появляется только при вызове модуля core
. (Я доказал это, переименовав модуль, и он отлично сработал. Переименование обратно в core
и ImportError
исключение выдается снова).
Я довольно новичок в Python, но пришел к выводу, что это связано с другим модулем под названием core
, уже существующим в моем Python path (хотя я не могу его найти).
Я решил это, просто выбрав другое имя для своего модуля (или, скорее, приложения Django)
Ответ №2:
Это циклический импорт. Вы делаете это import core.util.widgets.tab
из user_interface
, а затем пытаетесь импортировать user_interface
изнутри tab
. Это импорт, который никогда не может быть завершен из-за того, что природа каждого зависит от другого. В этой статье о них рассказывается более подробно:http://effbot.org/zone/import-confusion.htm#circular-imports .
Комментарии:
1. Моя ошибка, сбой в мозге из-за ручного ввода. пользовательский интерфейс — это user_interface. Я отредактирую вышесказанное.
2. полная строка импорта в tab.py это: из ядра импортировать пользовательский интерфейс, хост, события, язык, пути, что приводит к этой ошибке: File «/home/james/Documents/Projects/SCD/core/scd/widget/tab.py «, строка 10, в <module> из ядра импортируйте пользовательский интерфейс, хост, события, язык, пути Ошибка импортера: не удается импортировать имя user_interface
3. Есть ли способ разрешить tab.py для доступа к компонентам user_interface. что тогда? Я пытаюсь изменить назначение некоторого кода, и хотя многое из фактического кода изменилось, порядок импорта такой же, как и в исходном приложении для этих двух файлов. Исправлена та же ошибка ….
4. Ну, видимо, тогда мне нужно провести еще один рефакторинг. Интересно, с какой стати исходный код тогда вообще работал.
5. Возможно, проще всего было бы переместить
tab
требуемый код изuser_interface
в другой модуль, из которого они оба могут импортировать.