Risposta aggiornata
Un modo migliore per farlo è:
import subprocess
import sys
reqs = subprocess.check_output([sys.executable, '-m', 'pip', 'freeze'])
installed_packages = [r.decode().split('==')[0] for r in reqs.split()]
Il risultato:
print(installed_packages)
[
"Django",
"six",
"requests",
]
Controlla se requests
è installato:
if 'requests' in installed_packages:
# Do something
Perché in questo modo? A volte si verificano conflitti di nomi di app. L'importazione dallo spazio dei nomi dell'app non fornisce un quadro completo di ciò che è installato nel sistema.
Nota, quella soluzione proposta funziona:
- Quando si utilizza pip per installare da PyPI o da qualsiasi altra fonte alternativa (come
pip install http://some.site/package-name.zip
o qualsiasi altro tipo di archivio).
- Durante l'installazione manuale utilizzando
python setup.py install
.
- Quando si installa da repository di sistema, come
sudo apt install python-requests
.
Casi in cui potrebbe non funzionare:
- Durante l'installazione in modalità di sviluppo, come
python setup.py develop
.
- Durante l'installazione in modalità di sviluppo, come
pip install -e /path/to/package/source/
.
Vecchia risposta
Un modo migliore per farlo è:
import pip
installed_packages = pip.get_installed_distributions()
Per pip> = 10.x utilizzare:
from pip._internal.utils.misc import get_installed_distributions
Perché in questo modo? A volte si verificano conflitti di nomi di app. L'importazione dallo spazio dei nomi dell'app non fornisce un quadro completo di ciò che è installato nel sistema.
Di conseguenza, ottieni un elenco di pkg_resources.Distribution
oggetti. Vedere quanto segue come esempio:
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)",
]
Fai un elenco:
flat_installed_packages = [package.project_name for package in installed_packages]
[
"Django",
"six",
"requests",
]
Controlla se requests
è installato:
if 'requests' in flat_installed_packages:
# Do something