python - barplot - pandas plot
Compruebe si el paquete Python está instalado (8)
Respuesta actualizada
Una mejor forma de hacer esto es:
import subprocess
import sys
reqs = subprocess.check_output([sys.executable, ''-m'', ''pip'', ''freeze''])
installed_packages = [r.decode().split(''=='')[0] for r in reqs.split()]
El resultado:
print(installed_packages)
[
"Django",
"six",
"requests",
]
Compruebe si las requests
están instaladas:
if ''requests'' in installed_packages:
# Do something
Respuesta anterior
Una mejor forma de hacer esto es:
import pip
installed_packages = pip.get_installed_distributions()
Para pip> = 10.x use:
from pip._internal.utils.misc import get_installed_distributions
¿Por qué de esta manera? A veces tienes colisiones de nombres de aplicaciones. Importar desde el espacio de nombres de la aplicación no le da una idea completa de lo que está instalado en el sistema.
Como resultado, obtiene una lista de pkg_resources.Distribution
objects. Vea lo siguiente como un ejemplo:
print installed_packages
[
"Django 1.6.4 (/path-to-your-env/lib/python2.7/site-packages)",
"six 1.6.1 (/path-to-your-env/lib/python2.7/site-packages)",
"requests 2.5.0 (/path-to-your-env/lib/python2.7/site-packages)",
]
Haga una lista de eso:
flat_installed_packages = [package.project_name for package in installed_packages]
[
"Django",
"six",
"requests",
]
Compruebe si las requests
están instaladas:
if ''requests'' in flat_installed_packages:
# Do something
¿Cuál es una buena forma de verificar si un paquete está instalado dentro de un script de Python? Sé que es fácil para el intérprete, pero tengo que hacerlo dentro de un guión.
Creo que podría verificar si hay un directorio en el sistema que se creó durante la instalación, pero creo que hay una mejor manera. Estoy intentando asegurarme de que el paquete de Skype4Py está instalado y, de no ser así, lo instalaré.
Mis ideas para lograr el control
- compruebe si hay un directorio en la ruta de instalación típica
- intenta importar el paquete y si se lanza una excepción, entonces instala el paquete
A partir de Python 3.3, puede usar el método find_spec()
import importlib.util
import sys
# For illustrative purposes.
package_name = ''pandas''
spec = importlib.util.find_spec(package_name)
if spec is None:
print(package_name +" is not installed")
Como una extensión de esta respuesta :
Para Python 2. *, pip show <package_name>
realizará la misma tarea.
Por ejemplo, pip show numpy
devolverá lo siguiente o similar:
Name: numpy
Version: 1.11.1
Summary: NumPy: array processing for numbers, strings, records, and objects.
Home-page: http://www.numpy.org
Author: NumPy Developers
Author-email: [email protected]
License: BSD
Location: /home/***/anaconda2/lib/python2.7/site-packages
Requires:
Required-by: smop, pandas, tables, spectrum, seaborn, patsy, odo, numpy-stl, numba, nfft, netCDF4, MDAnalysis, matplotlib, h5py, GridDataFormats, dynd, datashape, Bottleneck, blaze, astropy
Ir opción # 2. Si se lanza ImportError
, entonces el paquete no está instalado (o no en sys.path
).
Me gustaría agregar algunos pensamientos / hallazgos míos a este tema. Estoy escribiendo un script que verifica todos los requisitos para un programa personalizado. También hay muchos controles con módulos de python.
Hay un pequeño problema con el
try:
import ..
except:
..
solución. En mi caso, uno de los módulos de python se llama python-nmap
, pero lo importas con import nmap
y como ves los nombres no coinciden. Por lo tanto, la prueba con la solución anterior arroja un resultado False, y también importa el módulo en hit, pero tal vez no sea necesario usar mucha memoria para una prueba / verificación simple.
También encontré eso
import pip
installed_packages = pip.get_installed_distributions()
installed_packages
tendrá solo los paquetes se ha instalado con pip . En mi sistema, pip freeze
devuelve más de 40
módulos de python, mientras que installed_packages
tiene solo 1
, el que instalé manualmente (python-nmap).
Otra solución a continuación que yo sepa puede no ser relevante para la pregunta , pero creo que es una buena práctica mantener la función de prueba separada de la que realiza la instalación, que podría ser útil para algunos.
La solución que funcionó para mí. Se basa en esta respuesta Cómo verificar si existe un módulo de Python sin importarlo
from imp import find_module
def checkPythonmod(mod):
try:
op = find_module(mod)
return True
except ImportError:
return False
NOTA: esta solución tampoco puede encontrar el módulo con el nombre python-nmap
, tengo que usar nmap
lugar (es fácil vivir con él) pero en este caso el módulo no se cargará en la memoria en absoluto.
Si desea que su script instale los paquetes que faltan y continúe, puede hacer algo como esto (en el ejemplo del módulo ''krbV'' en el paquete ''python-krbV''):
import pip
import sys
for m, pkg in [(''krbV'', ''python-krbV'')]:
try:
setattr(sys.modules[__name__], m, __import__(m))
except ImportError:
pip.main([''install'', pkg])
setattr(sys.modules[__name__], m, __import__(m))
Si desea tener el cheque desde la terminal, puede ejecutar
pip3 show package_name
y si no se devuelve nada, el paquete no está instalado.
Si tal vez desea automatizar esta comprobación, de modo que, por ejemplo, puede instalarla si falta, puede tener lo siguiente en su script bash:
pip3 show package_name 1>/dev/null #pip for Python 2
if [ $? == 0 ]; then
echo "Installed" #Replace with your actions
else
echo "Not Installed" #Replace with your actions, ''pip3 install --upgrade package_name'' ?
fi
Si te refieres a un script de Python, solo haz algo como esto:
try:
import mymodule
except ImportError, e:
pass # module doesn''t exist, deal with it.