la importación relativa no funciona en Python

Tengo una estructura de proyecto como esta...

app/
    main.py
    app/
        __init__.py
        boot.py
        server.py
        controllers/
            __init__.py
            home.py

Las importaciones son...

# main.py
from app import server

# server.py
from . import boot

# boot.py
from . import controllers

# controllers/__init__.py
from . import home

# controllers/home.py
from .. import boot

Ahora todas las importaciones están funcionando. excepto el ultimo. El error que arroja es...

ImportError: cannot import name boot

¿Cuál es el problema? (Estoy usando Python 3.2)

preguntado el 22 de mayo de 12 a las 16:05

¿Puedo preguntar por qué están haciendo importaciones relativas? Tienden a ser frágiles y también más difíciles de leer cuando se realiza el mantenimiento en el futuro. -

Lo he intentado todo, nada funciona. ¿Puedes sugerir algo más? -

1 Respuestas

estas importando boot que está importando controllers, al que luego se le pide que importe homey home luego intenta importar boot, pero aún no se ha terminado de importar. No hagas esto, estás creando una dependencia circular aquí.

Ver también Dependencia de importación circular en Python

contestado el 23 de mayo de 17 a las 12:05

Entonces, ¿cómo eludo las importaciones circulares? Porque realmente necesito importar boot.py dentro home.py - codificador de árbol

Al organizar mejor su código; reestructurar hasta que no necesite cargar paquetes principales ayudaría, por ejemplo. - Martijn Pieters

Tienes que reestructurar tu código. El 99% de las veces, si su código se ajusta a un patrón jerárquico natural y sus componentes de nivel superior tienen que importar los de nivel inferior, tiene una falla de diseño. - Rayo Silas

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.