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 requests
está instalado:
if 'requests' in installed_packages:
# Do something
¿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 brinda una imagen completa de lo que está instalado en el sistema.
Tenga en cuenta que la solución propuesta funciona:
- Al usar pip para instalar desde PyPI o desde cualquier otra fuente alternativa (como
pip install http://some.site/package-name.zip
o cualquier otro tipo de archivo).
- Al instalar manualmente usando
python setup.py install
.
- Al instalar desde repositorios del sistema, como
sudo apt install python-requests
.
Casos en los que podría no funcionar:
- Al instalar en modo de desarrollo, me gusta
python setup.py develop
.
- Al instalar en modo de desarrollo, me gusta
pip install -e /path/to/package/source/
.
Respuesta antigua
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 brinda una imagen completa de lo que está instalado en el sistema.
Como resultado, obtienes una lista de pkg_resources.Distribution
objetos. Vea lo siguiente como 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)",
]
Haz una lista:
flat_installed_packages = [package.project_name for package in installed_packages]
[
"Django",
"six",
"requests",
]
Compruebe si requests
está instalado:
if 'requests' in flat_installed_packages:
# Do something