xticks barplot python package skype python-import

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.