python - tutorial - Cuándo usar las importaciones absolutas
tutorial django (1)
Estoy cambiando un montón de código python viejo que ocasionalmente se ejecuta en colisiones de nombres entre paquetes. Tengo una pregunta sobre cuándo se deben usar las importaciones absolutas y si sería apropiado importar módulos del mismo nivel solo por nombre.
/package/
/package/__init__.py
/package/subA
/package/subA/__init__.py
/package/subA/moduleA.py
/package/subA/moduleB.py
/package/subB
/package/subB/__init__.py
/package/subB/moduleA.py
/package/subB/moduleB.py
En caso de que cada declaración de importación dentro del paquete se vea así:
import package.subX.moduleX
o
from package.subX import moduleX
¿Qué tal en los archivos del subpaquete __init__.py
? ¿Sería incorrecto simplemente poner
import moduleA
import moduleB
O bien, en /package/subA/moduleA.py, sería incorrecto poner simplemente:
import moduleB
Las importaciones relativas resultaron ser una muy mala idea, a pesar de que fueron el comportamiento predeterminado por mucho tiempo. Puede encontrar bastantes preguntas en este sitio donde alguien simplemente nombró su archivo después de un módulo incorporado y rompió su aplicación con mensajes de error extraños.
Es por eso que siempre es bueno hacer importaciones absolutas al hacer referencia a su proyecto en todas partes , incluidos los paquetes.
En resumen, usa este estilo:
import myproject.mypackage
from myproject.mypackage.myfile import MyClass
Cita de PEP8 :
Las importaciones relativas para las importaciones dentro del paquete son altamente desaconsejadas. Utilice siempre la ruta absoluta del paquete para todas las importaciones. Incluso ahora que PEP 328 está completamente implementado en Python 2.5, su estilo de importaciones relativas explícitas se desalienta activamente; las importaciones absolutas son más portátiles y generalmente más legibles.