Lingua-e
Python

¿Qué significa Error de importación circular?

← Errores

Una importación circular ocurre cuando el módulo A importa desde el módulo B, y el módulo B también importa desde el módulo A. Cuando Python carga A por primera vez, comienza a cargar B, que intenta importar desde A antes de que A haya terminado de inicializarse, resultando en un ImportError o módulo parcialmente inicializado.

Por qué ocurre

  • Dos módulos que dependen entre sí se importan mutuamente a nivel de módulo.
  • Un módulo de utilidades importa desde un módulo de modelos que importa desde utilidades.
  • Constantes o helpers compartidos ubicados en un módulo que también importa lógica de dominio.
  • Frameworks con sistemas de plugins donde los plugins importan del núcleo y el núcleo importa plugins.

Ejemplos

Python

Código que causa el error

# a.py
from b import greet

def name():
    return "Alice"

# b.py
from a import name

def greet():
    return f"Hello {name()}"

Error en la terminal

ImportError: cannot import name 'greet' from partially initialized module 'b' (most likely due to a circular import)

Cómo solucionarlo

Rompe el ciclo moviendo el código compartido a un tercer módulo del que ni A ni B importen. Usa importaciones locales (a nivel de función) para diferir la carga hasta que se llamen las funciones. Reestructura tu paquete para que las dependencias fluyan en una dirección.

Código corregido

# a.py - no import from b at top level
def name():
    return "Alice"

# b.py
def greet():
    from a import name  # local import breaks the cycle
    return f"Hello {name()}"

Errores relacionados

¿Listo para practicar tu inglés en el trabajo?

Lingua-e tiene ejercicios interactivos basados en conversaciones reales de developers: standups, code reviews, retrospectivas y más. Practica hasta que salga solo.

Prueba Lingua-e gratis