En la terminal, después de iniciar Python, ¿cómo sabré cuáles son los módulos presentes en python? Supongamos que necesito aprender los módulos NumPy y SciPy.
- ¿Cómo lo instalaré si no está instalado?
- ¿Cómo sabré si ya está instalado?
fuente
En la terminal, después de iniciar Python, ¿cómo sabré cuáles son los módulos presentes en python? Supongamos que necesito aprender los módulos NumPy y SciPy.
Cómo saber si un módulo de Python está instalado o no en el sistema: puede hacer una prueba muy fácil en la terminal,
$ python -c "import math"
$ echo $?
0 # math module exists in system
$ python -c "import numpy"
Traceback (most recent call last):
File "<string>", line 1, in <module>
ImportError: No module named numpy
$ echo $?
1 # numpy module does not exist in system
Puede instalar un módulo específico descargando los paquetes respectivos del repositorio, por ejemplo, puede instalarscipy
como,
sudo apt-get install python-scipy ## for Python2
sudo apt-get install python3-scipy ## for Python3
Alternativamente , también puede instalar un módulo de Python usando python-pip
como lo sugiere Zack Titan en el comentario a continuación , para instalar numpy
puede usar
pip install numpy
Advertencia: Se recomienda encarecidamente instalar los módulos de python utilizando solo el repositorio oficial de Ubuntu y no utilizar el pip
método como superusuario (es decir, como root
o usando sudo
). En algunos casos, puede dejar su sistema inutilizable al romper el sistema python.
Cómo instalar paquetes usando pip
en un entorno virtual local.
vpython
necesita instalarlo comosudo apt-get install python-visual libgtkglextmm-x11-1.2-dev
sudo pip
; Puede romper el sistema Python. Use apt-get para instalar paquetes para el sistema python. Puede usar lapip --user
opción o virtualenv para instalar paquetes de Python por usted mismo.En caso de que no queramos importar indeseadamente un módulo en cuestión (lo que sucedería en una
try
declaración), podemos utilizarlosys.modules
para probar los módulos que están instalados y que fueron importados antes.En el problema del shell de Python:
Luego pruebe los módulos instalados:
Tenga en cuenta que solo los módulos que se importaron antes dan
True
en esta prueba, todos los demás módulos (incluso si están instalados) dan como resultadoFalse.
Otra alternativa a
try
unaimport
declaración en la consola de Python es llamar a lahelp()
función incorporada . Esto no proporcionará una documentación para módulos no instalados, p. Ej.Se puede interrumpir la salida de documentos de ayuda muy largos de los módulos instalados Q.
Ahora, para instalar los módulos que faltan, se recomienda usar la administración de paquetes de Ubuntu (y no la forma de Python pip) porque necesitamos acceso de root y también para evitar que se estropee nuestro sistema altamente dependiente de Python. Para el módulo en cuestión, esto sería, por ejemplo:
Después de la instalación, podemos agregarlos al
sys.modules
diccionario importándolos una vez.fuente
sys.modules
solo contiene módulos que ya se han importado , por lo que no es una forma confiable de probar si se ha instalado un módulo. La prueba más confiable es usartry/except
ay atrapar elImportError
, como ya han sugerido varios otros.sys.modules
es completamente irrelevante y creo que cualquier mención de él es engañosa. Pero tal vez solo soy yo.sys.modules
No hay ninguna ayuda aquí.Otra forma es el
pkgutil
módulo. Funciona con Python 2 y 3:Debe reemplazar
module
con el nombre de su módulo, por ejemplo:fuente
print()
también funcionará bien en Python 2; Se trata como una sintaxis de grupo con padres y no tiene ningún efecto secundario. Solo cuando desee agregar varios elementos (yaprint('a', 'b')
que se tratará como untuple
, en el que necesitafrom __future__ import print_function
, pero eso no es aplicable en este caso, puede escribir un código compatible con la adición agregando los parens (probé mis cambios) en Python 2 y 3.)exit
para que se pueda usar en contexto de shell:python -c 'import pkgutil; exit(0 if pkgutil.find_loader("math") else 2)'
Sé que el OP originalmente solicitó una solución después de iniciar Python, pero fuera de Python que uso
pip
. En ubuntu:sudo apt-get install python-pip
si aún no está instalado.Luego, para ver qué módulos de terceros están disponibles, simplemente ejecute:
O incluso
Y ambos le mostrarán todos los módulos instalados y sus versiones.
Si el módulo que está buscando no está instalado, la mayoría de las veces puede instalarlo fácilmente con pip:
Si no está seguro de si existe un módulo o cuál es su nombre PyPI, use
pip search
:fuente
pip show <module-name>
mostrará si un paquete está instalado, por ejemplopip show numpy
.Podrías poner el código adentro
try
,except
bloquear.fuente
Para proporcionar otra respuesta, por el bien de la finalización:
Puede (ab) usar la
-m
opción. De la página de manual de Python:Lo que nos dará:
Pero para módulos inexistentes, nos dará:
Podríamos usar
grep
para hacer coincidir esto:Esto es un poco hack-ish, y no es para lo que
-m
fue diseñado; pero es el método que requiere menos tipeo si desea una prueba rápida :-)fuente
grep -q
hace que la redirección a nulo sea innecesaria./dev/null
largo de los años: - /Escribí un ejemplo en Python:
fuente
Comprobación de línea de Shell (útil para el aprovisionamiento)
Descubrí que para que mi aprovisionamiento de infraestructura sea idempotente, necesito poder verificar un paquete desde el shell en una línea. Me basé en la respuesta de @ cuonglm. Tuve que invertir el
1
y0
porque estoy produciendo un estado de salida en lugar de imprimir una cadena.Puede reemplazarlo
sys.argv[1]
con el nombre entre comillas de su paquete, pero para mis scripts de aprovisionamiento me gusta la legibilidad de tenerlo al final.** Me doy cuenta de que chef , puppet y ansible tienen complementos para administrar paquetes de python, pero es posible que te encuentres en una situación como la mía en la que estás usando una versión desactualizada y no quieres usar complementos obsoletos.
fuente
También se puede usar
pydoc modules
, que se puede filtrargrep
para encontrar un módulo específico. La salida se muestra en formato de columnas. La única desventaja de este enfoque es que también incluirá archivos de Python en el directorio de trabajo actual. Sin embargo, lo uso la mayor parte del tiempo y es uno de los enfoques altamente citados en esta pregunta relacionada: https://stackoverflow.com/q/739993/3701431fuente
Desde Ubuntu Shell, por defecto bash, tan simple como
Ejemplos
Y, si tiene dudas sobre el caso (aunque creo que todos los nombres de los paquetes siempre están en minúsculas):
fuente
Al escribir esto,
pip show ...
parece ser la forma más fácil: https://pip.pypa.io/en/stable/reference/pip_show/Pero es silencioso (es decir, no devuelve nada) cuando el paquete no está instalado.
fuente