Réponse mise à jour
Une meilleure façon de procéder est:
import subprocess
import sys
reqs = subprocess.check_output([sys.executable, '-m', 'pip', 'freeze'])
installed_packages = [r.decode().split('==')[0] for r in reqs.split()]
Le résultat:
print(installed_packages)
[
"Django",
"six",
"requests",
]
Vérifiez si requests
est installé:
if 'requests' in installed_packages:
# Do something
Pourquoi de cette façon? Parfois, vous avez des collisions de noms d'applications. L'importation à partir de l'espace de noms de l'application ne vous donne pas une image complète de ce qui est installé sur le système.
Notez que la solution proposée fonctionne:
- Lorsque vous utilisez pip pour installer à partir de PyPI ou de toute autre source alternative (comme
pip install http://some.site/package-name.zip
ou tout autre type d'archive).
- Lors de l'installation manuelle à l'aide de
python setup.py install
.
- Lors de l'installation à partir de référentiels système, comme
sudo apt install python-requests
.
Cas où cela pourrait ne pas fonctionner:
- Lors de l'installation en mode développement, comme
python setup.py develop
.
- Lors de l'installation en mode développement, comme
pip install -e /path/to/package/source/
.
Ancienne réponse
Une meilleure façon de procéder est:
import pip
installed_packages = pip.get_installed_distributions()
Pour pip> = 10.x utilisez:
from pip._internal.utils.misc import get_installed_distributions
Pourquoi de cette façon? Parfois, vous avez des collisions de noms d'applications. L'importation à partir de l'espace de noms de l'application ne vous donne pas une image complète de ce qui est installé sur le système.
En conséquence, vous obtenez une liste d' pkg_resources.Distribution
objets. Voir l'exemple suivant:
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)",
]
Faites-en une liste:
flat_installed_packages = [package.project_name for package in installed_packages]
[
"Django",
"six",
"requests",
]
Vérifiez si requests
est installé:
if 'requests' in flat_installed_packages:
# Do something