Esta sección ha sido evaluado por nuestros especialistas así garantizamos la veracidad de nuestro post.
Solución:
Pruebe el nombre del módulo en el sys.modules
diccionario:
import sys
modulename = 'datetime'
if modulename not in sys.modules:
print 'You have not imported the module'.format(modulename)
De la documentación:
Este es un diccionario que asigna nombres de módulos a módulos que ya se han cargado.
Tenga en cuenta que un import
declaración hace dos cosas:
- si el módulo nunca ha sido importado antes (== no presente en
sys.modules
), luego se carga y se agrega asys.modules
. - Vincule uno o más nombres en el espacio de nombres actual que hagan referencia al objeto del módulo oa objetos que sean miembros del espacio de nombres del módulo.
La expresion modulename not in sys.modules
prueba si el paso 1 ha tenido lugar. Probar el resultado del paso 2 requiere saber exactamente qué import
Se usó una declaración ya que establecieron diferentes nombres para hacer referencia a diferentes objetos:
import modulename
conjuntosmodulename = sys.modules['modulename']
import packagename.nestedmodule
conjuntospackagename = sys.modules['packagename']
(no importa cuántos niveles adicionales agregue)import modulename as altname
conjuntosaltname = sys.module['modulename']
import packagename.nestedmodule as altname
conjuntosaltname = sys.modules['packagename.nestedmodule']
from somemodule import objectname
conjuntosobjectname = sys.modules['somemodule'].objectname
from packagename import nestedmodulename
conjuntosnestedmodulename = sys.modules['packagename.nestedmodulename']
(sólo cuando no había ningún objeto nombradonestedmodulename
en elpackagename
espacio de nombres antes de esta importación, se agrega un nombre adicional para el módulo anidado al espacio de nombres del paquete principal en este punto)from somemodule import objectname as altname
conjuntosaltname = sys.modules['somemodule'].objectname
from packagename import nestedmodulename as altname
conjuntosaltname = sys.modules['packagename.nestedmodulename']
(sólo cuando no había ningún objeto nombradonestedmodulename
en elpackagename
espacio de nombres antes de esta importación, se agrega un nombre adicional para el módulo anidado al espacio de nombres del paquete principal en este punto)
Puede probar si el nombre al que se vinculó el objeto importado existe en un espacio de nombres determinado:
# is this name visible in the current scope:
'importedname' in dir()
# or, is this a name in the globals of the current module:
'importedname' in globals()
# or, does the name exist in the namespace of another module:
'importedname' in globals(sys.modules['somemodule'])
Esto solo le indica que el nombre existe (se ha vinculado), no si se refiere a un módulo u objeto específico de ese módulo. Puede realizar una introspección adicional de ese objeto o probar si es el mismo objeto que está disponible en sys.modules
si necesita descartar que el nombre se haya establecido en algo completamente diferente desde entonces.
A las respuestas de sys.modules aceptadas, agregaría una advertencia para tener cuidado al cambiar el nombre de los módulos en la importación:
>>> import sys
>>> import datetime as dt
>>> 'dt' in sys.modules
False
>>> 'datetime' in sys.modules
True
use sys.modules para probar si se ha importado un módulo (estoy usando unicodedata como ejemplo):
>>> import sys
>>> 'unicodedata' in sys.modules
False
>>> import unicodedata
>>> 'unicodedata' in sys.modules
True
Valoraciones y reseñas
Agradecemos que desees apoyar nuestra tarea exponiendo un comentario y puntuándolo te estamos eternamente agradecidos.