Depende de la versión de Python que esté utilizando. Si su versión específica de Python es de 2.4 o más (en 2015, espero que no), entonces sí sería una mala práctica ya que no hay forma (sin hacks) para diferenciar los dos módulos.
Sin embargo, en Python 2.5+, creo que la reutilización de los nombres de módulo lib estándar dentro de un espacio de nombres de paquete está perfectamente bien; de hecho, eso es the spirit of PEP328.
A medida que la biblioteca de Python se expande, cada vez más módulos internos del paquete existentes aparecen de repente en los módulos de la biblioteca estándar por accidente. Es un problema particularmente difícil dentro de los paquetes porque no hay forma de especificar a qué módulo se refiere. Para resolver la ambigüedad, se propone que foo siempre será un módulo o paquete accesible desde sys.path. Esto se llama una importación absoluta.
La comunidad python-dev eligió las importaciones absolutas como el valor predeterminado porque son el caso de uso más común y porque las importaciones absolutas pueden proporcionar toda la funcionalidad de las importaciones relativas (dentro del paquete), aunque a costa de la dificultad renombrar las piezas del paquete más arriba en la jerarquía o al mover un paquete dentro de otro.
Debido a que este representa un cambio en la semántica, las importaciones absolutos serán opcionales en Python 2.5 y 2.6 a través del uso de from __future__ import absolute_import
SWS.time
es claramente no lo mismo que time
y como lector de la código, esperaría que SWS.time
no solo utilizara time
, sino que lo extienda de alguna manera.
lo tanto, si SWS.foo
necesita importar SWS.time
, entonces se debe utilizar la ruta absoluta:
# in SWS.foo
# I would suggest renaming *within*
# modules that use SWS.time so that
# readers of your code aren't confused
# with which time module you're using
from SWS import time as sws_time
O, se debe utilizar un explícita relativa de las importaciones como en la respuesta de Bakuriu:
# in SWS.foo
from . import time as sws_time
En el caso de que necesite importar el módulo estándar lib time
dentro del módulo SWS.time
, primero deberá importar la función futura (solo para Python) 2.5+; Python 3+ hace esto por defecto):
# inside of SWS.time
from __future__ import absolute_import
import time
time.sleep(28800) # time for bed
Nota:from __future__ import absolute_imports
sólo afectará a las declaraciones de importación dentro del módulo que la función futura es importado y se no afectará a ningún otro módulo (ya que ello ser perjudicial si otro módulo depende de las importaciones relativas).
Creo que es bastante obvio que no debe volver a utilizar nombres de módulo de python estándar. Solo está buscando problemas. – Cryptite
¿Por qué es obvio? devilsadvocate> – MikeWyatt
Mire httplib/httplib2 y urllib/urllib2. Crea un mundo de bibliotecas más feo, pero es preferible mencionar colisiones y comportamientos indeterminados. –