Necesito saber si existe un módulo de Python, sin importarlo.
Importar algo que podría no existir (no es lo que quiero):
try:
import eggs
except ImportError:
pass
python
python-import
yarbelk
fuente
fuente

Respuestas:
Python2
Para verificar si la importación puede encontrar algo en python2, usando
impPara encontrar importaciones punteadas, debe hacer más:
También puede usar
pkgutil.find_loader(más o menos lo mismo que la parte python3Python3
Python3 ≤ 3.3
Deberías usar
importlib, Cómo hice esto fue:Mi expectativa es que si puedes encontrar un cargador para él, entonces existe. También puede ser un poco más inteligente al respecto, como filtrar los cargadores que aceptará. Por ejemplo:
Python3 ≥ 3.4
En Python3.4, los
importlib.find_loaderdocumentos de Python quedaron en desuso a favor deimportlib.util.find_spec. El método recomendado es elimportlib.util.find_spec. Hay otros comoimportlib.machinery.FileFinder, lo que es útil si buscas un archivo específico para cargar. Descubrir cómo usarlos está más allá del alcance de esto.Esto también funciona con importaciones relativas, pero debe proporcionar el paquete inicial, por lo que también podría hacer:
Si bien estoy seguro de que existe una razón para hacerlo, no estoy seguro de cuál sería.
ADVERTENCIA
¡Al intentar encontrar un submódulo, importará el módulo principal (para todos los métodos anteriores)!
comentarios bienvenidos para evitar esto
Agradecimientos
find_loaderfuente
eggs.ham.spam.spameneggs.hamtiimp.find_module('spam', ['eggs', 'ham'])impestá en desuso a favor deimportlibPython 3.pkgutil.find_loader("my.package.module")devuelve un cargador si el paquete / módulo existe yNonesi no. Actualice su respuesta para Python 2, ya que enmascarar el ImportError me volvió loco ayer xPDespués de usar la respuesta de yarbelk, hice esto para no tener que importar
ìmp.Útil en Django
settings.pypor ejemplo.fuente
Python 3> = 3.6: ModuleNotFoundError
Se
ModuleNotFoundErrorha introducido en Python 3.6 y se puede utilizar para este propósito.El error se genera cuando no se puede encontrar un módulo o uno de sus padres . Entonces
imprimiría un mensaje que se vería
No module named 'eggs'si eleggsmódulo no se puede encontrar; pero imprimiría algo comoNo module named 'eggs.sub'sisubno se pudiera encontrar el módulo pero se pudiera encontrar eleggspaquete.Consulte la documentación del sistema de importación para obtener más información sobre
ModuleNotFoundErrorfuente
Python 2, sin depender de ImportError
Hasta que se actualice la respuesta actual, este es el camino para Python 2
¿Por qué otra respuesta?
Muchas respuestas hacen uso de la captura de un
ImportError. El problema con eso es que no podemos saber qué arroja elImportError.Si importa su loro módulo y sucede que hay una
ImportErroren el módulo (por ejemplo, error tipográfico en la línea 1), el resultado será que el módulo no existe. Le llevará bastante retroceso descubrir que su módulo existe y queImportErrorestá atrapado y hace que las cosas fallen silenciosamente.fuente
ImportError; edite si no le quedó claro.La respuesta de go_as como un trazador de líneas
fuente
Me encontré con esta pregunta mientras buscaba una forma de verificar si un módulo está cargado desde la línea de comandos y me gustaría compartir mis pensamientos sobre los que vienen después de mí y buscan lo mismo:
Método de archivo de script Linux / UNIX : cree un archivo
module_help.py:Luego asegúrese de que sea ejecutable:
chmod u+x module_help.pyY llámalo con un
pipeparagrep:Método interactivo : en la carga de la consola
pythonSi se encuentra, deje de leer escribiendo
qPara salir de la sesión interactiva de Python, presione Ctrl+D
El método de archivo de script de Windows también es compatible con Linux / UNIX, y mejor en general :
Llamándolo desde el comando como:
Daría salida:
y tendrías que presionar
qpara salir del modo interactivo.Utilizándolo módulo desconocido:
Daría salida:
y salir
fuente
Utilice una de las funciones de pkgutil , por ejemplo:
fuente
Una declaración if más simple de AskUbuntu: ¿Cómo verifico si un módulo está instalado en Python?
fuente
Puede escribir un pequeño script que intente importar todos los módulos y decirle cuáles fallan y cuáles funcionan:
Salida:
Una advertencia: esto intentará importar todo para que veas cosas como
PyYAML failed with error code: No module named pyyamlporque el nombre de importación real es solo yaml. Entonces, siempre que conozca sus importaciones, esto debería ser el truco para usted.fuente
Escribí esta función auxiliar:
fuente
También puedes usar
importlibdirectamentefuente
No hay forma de verificar de manera confiable si el "módulo de puntos" es importable sin importar su paquete principal. Dicho esto, hay muchas soluciones al problema "cómo verificar si existe el módulo Python".
La solución a continuación soluciona el problema de que el módulo importado puede generar ImportError incluso si existe. Queremos distinguir esa situación de aquella en la que el módulo no existe.
Python 2 :
Python 3 :
fuente
en django.utils.module_loading.module_has_submodule
fuente