Python LinuxWindowsmacOS

Python: ImportError: cannot import name — циклический импорт

  • Обновлено
  • Чтение ≈ 2 минуты

Краткий ответ

Два модуля импортируют друг друга. Вынесите общий код в третий модуль или импортируйте внутри функции.

В этой статье
  1. Что означает ошибка
  2. Причины и признаки
  3. Пошаговое решение
  4. Если проблема осталась

#Что означает ошибка

Сообщение
cannot import name

ImportError: cannot import name не всегда означает цикл. Сообщение from partially initialized module обычно указывает на незавершённую инициализацию из-за взаимного импорта; без него сначала проверяют существование символа, версию библиотеки и совпадение имён файлов.

#Причины и признаки

Возможная причинаКак узнатьЧто делать
Циклический импортВ трассировке «partially initialized module», файлы импортируют друг другаВынести общий код в независимый модуль
Опечатка имениИмпортируемого имени нет в модуле или ошибочен регистрСверить определение и написание имени
Имя файла совпадаетИмпорт разрешается в локальный json.py или typing.pyПереименовать конфликтующий файл проекта
Старая версияСимвол отсутствует в данной версии пакетаПроверить API и версию пакета

#Пошаговое решение

  1. Найдите два модуля, образующих циклВ терминале редактора проекта запустите приложение тем же способом, что и при сбое: python main.py (в Windows при необходимости py main.py). В полной трассировке найдите две строки File ... с вашими файлами и сообщение partially initialized module — это типичный признак цикла. Откройте оба файла: если a.py на верхнем уровне импортирует b, а b.py импортирует a, оба файла зависят друг от друга до окончания инициализации. Сначала сохраните изменения в системе контроля версий.
  2. Разорвите цикл без изменения поведенияВ редакторе выделите общие классы, константы или функции, которыми пользуются оба модуля. Создайте третий файл, например common.py, поместите определения туда и измените импорты обоих модулей на from common import .... Убедитесь, что сам common.py не импортирует a и b. Если зависимость нужна лишь во время вызова, допустимо перенести один импорт внутрь соответствующей функции; делайте это только если не создаётся новый круг вызовов.
  3. Исключите опечатку и затенение библиотекиЕсли сообщения partially initialized module нет, посмотрите имя после cannot import name и проверьте, действительно ли символ объявлен в указанном модуле и доступен в установленной версии пакета. В терминале проекта выполните python -c "import имя_модуля; print(имя_модуля.__file__)", предварительно заменив имя без кавычек своим. Если путь указывает на ваш json.py, typing.py или иной файл с именем библиотеки, переименуйте его и перезапустите интерпретатор; не удаляйте системные модули.
  4. Повторите запуск и проверьте точный импортСнова запустите исходную команду и проверьте, что ImportError исчез и основные функции приложения продолжают работать. Если ошибка сменилась, соберите полную трассировку, список файлов с импортами и версии python --version и пакета. Не устанавливайте пакеты наугад: проблема циклического импорта находится в структуре программы, а не обязательно в окружении.

#Если проблема осталась

Если «Python: ImportError: cannot import name — циклический импорт» повторяется, сохраните время, состояние подключения и точный текст ошибки. Не меняйте сразу несколько настроек — иначе станет трудно понять, какое действие повлияло на результат.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.