Antwort aktualisiert
Ein besserer Weg, dies zu tun, ist:
import subprocess
import sys
reqs = subprocess.check_output([sys.executable, '-m', 'pip', 'freeze'])
installed_packages = [r.decode().split('==')[0] for r in reqs.split()]
Das Ergebnis:
print(installed_packages)
[
"Django",
"six",
"requests",
]
Überprüfen Sie, ob requests
installiert ist:
if 'requests' in installed_packages:
# Do something
Warum so? Manchmal kommt es zu Kollisionen mit App-Namen. Beim Importieren aus dem App-Namespace erhalten Sie kein vollständiges Bild davon, was auf dem System installiert ist.
Beachten Sie, dass die vorgeschlagene Lösung funktioniert:
- Bei Verwendung von pip zur Installation von PyPI oder einer anderen alternativen Quelle (wie
pip install http://some.site/package-name.zip
einem anderen Archivtyp ).
- Bei manueller Installation mit
python setup.py install
.
- Bei der Installation aus System-Repositorys, wie z
sudo apt install python-requests
.
Fälle, in denen es möglicherweise nicht funktioniert:
- Bei der Installation im Entwicklungsmodus wie
python setup.py develop
.
- Bei der Installation im Entwicklungsmodus wie
pip install -e /path/to/package/source/
.
Alte Antwort
Ein besserer Weg, dies zu tun, ist:
import pip
installed_packages = pip.get_installed_distributions()
Für pip> = 10.x verwenden Sie:
from pip._internal.utils.misc import get_installed_distributions
Warum so? Manchmal kommt es zu Kollisionen mit App-Namen. Beim Importieren aus dem App-Namespace erhalten Sie kein vollständiges Bild davon, was auf dem System installiert ist.
Als Ergebnis erhalten Sie eine Liste von pkg_resources.Distribution
Objekten. Sehen Sie sich als Beispiel Folgendes an:
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)",
]
Machen Sie eine Liste davon:
flat_installed_packages = [package.project_name for package in installed_packages]
[
"Django",
"six",
"requests",
]
Überprüfen Sie, ob requests
installiert ist:
if 'requests' in flat_installed_packages:
# Do something