la importación relativa no funciona en Python
Frecuentes
Visto 194 veces
2
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)
1 Respuestas
8
estas importando boot
que está importando controllers
, al que luego se le pide que importe home
y 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 python python-3.x or haz tu propia pregunta.
¿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. - Silas Ray
Lo he intentado todo, nada funciona. ¿Puedes sugerir algo más? - treecoder