Prueba el nombre del módulo en el sys.modulesdiccionario :
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 una importdeclaración hace dos cosas:
- si el módulo nunca se ha importado antes (== no está presente en
sys.modules), entonces se carga y se agrega sys.modules.
- Enlaza 1 o más nombres en el espacio de nombres actual que hacen referencia al objeto del módulo o a objetos que son miembros del espacio de nombres del módulo.
La expresión modulename not in sys.modulescomprueba si se ha realizado el paso 1. La prueba del resultado del paso 2 requiere saber qué importdeclaración exacta se usó, ya que establecen diferentes nombres para hacer referencia a diferentes objetos:
import modulename conjuntos modulename = sys.modules['modulename']
import packagename.nestedmoduleconjuntos packagename = sys.modules['packagename'](no importa cuántos niveles adicionales agregue)
import modulename as altname conjuntos altname = sys.module['modulename']
import packagename.nestedmodule as altname conjuntos altname = sys.modules['packagename.nestedmodule']
from somemodule import objectname conjuntos objectname = sys.modules['somemodule'].objectname
from packagename import nestedmodulenameconjuntos nestedmodulename = sys.modules['packagename.nestedmodulename'](solo cuando no había ningún objeto nombrado nestedmodulenameen el packagenameespacio 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 conjuntos altname = sys.modules['somemodule'].objectname
from packagename import nestedmodulename as altnameconjuntos altname = sys.modules['packagename.nestedmodulename'](solo cuando no había ningún objeto nombrado nestedmodulenameen el packagenameespacio 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 estaba vinculado el objeto importado existe en un espacio de nombres determinado:
'importedname' in dir()
'importedname' in globals()
'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 el que está disponible en sys.modules, si necesita descartar que el nombre se haya establecido en algo completamente diferente desde entonces.
raise SystemError()(u otra excepción de su elección) en la parte superior del módulo que no desea importar. Si no realmente importa en algún lugar, su programa arrojará un rastreo y salida.