Saltar al contenido

¿Cómo comprobar si se ha importado un módulo de python?

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:

  1. si el módulo nunca ha sido importado antes (== no presente en sys.modules), luego se carga y se agrega a sys.modules.
  2. 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 conjuntos modulename = sys.modules['modulename']
  • import packagename.nestedmodule conjuntos 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 nestedmodulename conjuntos nestedmodulename = sys.modules['packagename.nestedmodulename'] (sólo cuando no había ningún objeto nombrado nestedmodulename en el packagename 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 conjuntos altname = sys.modules['somemodule'].objectname
  • from packagename import nestedmodulename as altname conjuntos altname = sys.modules['packagename.nestedmodulename'] (sólo cuando no había ningún objeto nombrado nestedmodulename en el packagename 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.modulessi 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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *