ExpertiDict

Python · Intermediário · Português · Técnico

importação circular

/ĩpoɾtaˈsɐ̃w siɾkuˈlaɾ/substantivo

Situação em que o módulo A importa B e B importa A, de modo que um deles é carregado pela metade e falta algum nome, causando ImportError ou AttributeError.

Onde usar

Aparece quando o projeto cresce e modelos e serviços passam a se referenciar. Em code review, as saídas usuais são mover o import para dentro da função, extrair um terceiro módulo ou usar TYPE_CHECKING.

Em código

# a.py
from b import g
def f(): return 1
# b.py
from a import f  # ciclo: a importa b
def g(): return f()
# ImportError: partially initialized

Exemplos

Deu importação circular entre o modelo e o serviço.

Extrai os tipos para um terceiro módulo e desfiz a importação circular.

Cuidado

Não resolva só embaralhando a ordem dos imports no topo; o ciclo continua e volta a quebrar depois.

Sinônimos

import circular

Veja também

Todos os termos de Python