Импортировать пакет с верхнего уровня приложения - PullRequest
0 голосов
/ 10 мая 2011

Итак, у меня есть приложение со структурой:

main.py
core/__init__.py
core/user_interface.py
core/util/__init__.py
core/util/widgets/__init__.py
core/util/widgets/tab.py

Файл main.py выполняет импорт:

from core import user_interface

Это выполняется успешно, затем user_interface выполняет импортcall:

import core.util.widgets.tab

Файл tab.py затем вызывает импорт:

from core import user_interface

Этот последний импорт завершается ошибкой и возвращает ошибку:

ImportError: cannot import name user_interface

Выполнениеприложения или попытки импортировать модуль user_interface из терминала завершаются неудачно с этой ошибкой, поскольку цепочка импорта разрывается.Я знаю, что где-то совершаю очень основную ошибку, но я почти сошел с ума с этим.Если кто-то может помочь решить эту проблему, я был бы очень признателен.

Ответы [ 2 ]

1 голос
/ 31 августа 2011

Я только что столкнулся с точно такой же проблемой - но она появляется, только если модуль называется core. (Я доказал это, переименовав модуль, и он работал нормально. Переименование обратно в core и исключение ImportError снова генерируется).

Я довольно новичок в python, но пришел к выводу, что это связано с тем, что в моем пути Python уже существует другой модуль с именем core (хотя я не могу его найти).

Я решил эту проблему, просто выбрав другое имя для моего модуля (или, скорее, приложения Django)

0 голосов
/ 10 мая 2011

Это круговой импорт. Вы делаете import core.util.widgets.tab из user_interface и затем пытаетесь импортировать user_interface из tab. Это импорт, который никогда не может быть завершен в зависимости от характера каждого. Эта статья рассказывает о них более подробно: http://effbot.org/zone/import-confusion.htm#circular-imports.

...