Las importaciones relativas de Python ya no se desaconsejan enérgicamente, pero se recomienda enfáticamente el uso de absolute_import en ese caso.
favor ver this discussion citando el propio Guido:
"¿No es sobre todo histórica Hasta la nueva sintaxis relativa a importar se implementó había varios problemas con las importaciones en relación La solución a corto plazo fue?. para recomendar no usarlos. La solución a largo plazo fue implementar una sintaxis inequívoca. Ahora es el momento de retirar la anti-recomendación.Por supuesto, sin ir por la borda - Todavía los encuentro un gusto adquirido; pero tener su lugar."
El PO enlaza correctamente el PEP 328 que dice: se presentaron
varios casos de uso, el más importante de los cuales está siendo capaz de reorganizar la estructura de paquetes grandes sin tener que editar sub -packages. Además, un módulo dentro de un paquete no puede fácilmente importación por sí mismo sin la importación relativos.
ver también pregunta casi duplicado When or why to use relative imports in Python
Por supuesto, sigue siendo una cuestión de gusto. Si bien es más fácil mover el código con importaciones relativas, eso también podría romper inesperadamente las cosas; y cambiar el nombre de las importaciones no es tan difícil.
para forzar el nuevo comportamiento de PEP 328 uso:
from __future__ import absolute_import
En este caso, la importación en relación implícita ya no será posible (por ejemplo import localfile
no funcionará más, solamente from . import localfile
.). Para un comportamiento limpio y futuro, es recomendable usar absolute_import.
Una advertencia importante es que debido a PEP 338 y PEP 366, las importaciones en relación requieren el archivo de Python para ser importado como un módulo - no se puede ejecutar un file.py que tiene una importación relativa o tendrá que obtener una ValueError: Attempted relative import in non-package
.
Esta limitación debe tenerse en cuenta al evaluar el mejor enfoque. Guido está en contra de ejecutar scripts desde un módulo en cualquier caso:
Tengo -1 en este y en cualquier otro twiddlings propuesto de la maquinaria __main__. El único caso de uso parece ser la ejecución de scripts que casualmente se encuentran dentro del directorio de un módulo, que siempre he visto como un antipatrón. Para hacerme cambiar de opinión, tendrías que convencerme de que no es así.
Se pueden encontrar discusiones exhaustivas sobre el tema en SO; re. Python 3 esto es bastante amplia:
Sí, que no estaba allí la última vez que leí a través de PEP 8! –
@Rafe, "mira algunos proyectos bien escritos ..." ¿Alguna sugerencia? – denis
@Denis: Rietveld es el proyecto propio de Guido van Rossum, así que supongo que sería un buen lugar para buscar (http://code.google.com/p/rietveld/). La biblioteca estándar de Python no es tan buena, muchos de esos códigos no siguen las convenciones. –