Zaktualizowana odpowiedź
Lepszym sposobem na to jest:
import subprocess
import sys
reqs = subprocess.check_output([sys.executable, '-m', 'pip', 'freeze'])
installed_packages = [r.decode().split('==')[0] for r in reqs.split()]
Wynik:
print(installed_packages)
[
"Django",
"six",
"requests",
]
Sprawdź, czy requests
jest zainstalowany:
if 'requests' in installed_packages:
# Do something
Dlaczego w ten sposób? Czasami występują kolizje nazw aplikacji. Importowanie z przestrzeni nazw aplikacji nie daje pełnego obrazu tego, co jest zainstalowane w systemie.
Zwróć uwagę, że proponowane rozwiązanie działa:
- Gdy używasz pip do instalacji z PyPI lub z innego alternatywnego źródła (takiego jak
pip install http://some.site/package-name.zip
lub dowolnego innego typu archiwum).
- Podczas instalacji ręcznej za pomocą
python setup.py install
.
- Podczas instalacji z repozytoriów systemowych, takich jak
sudo apt install python-requests
.
Przypadki, w których może to nie działać:
- Podczas instalacji w trybie programistycznym, na przykład
python setup.py develop
.
- Podczas instalacji w trybie programistycznym, na przykład
pip install -e /path/to/package/source/
.
Stara odpowiedź
Lepszym sposobem na to jest:
import pip
installed_packages = pip.get_installed_distributions()
Dla pip> = 10.x użyj:
from pip._internal.utils.misc import get_installed_distributions
Dlaczego w ten sposób? Czasami występują kolizje nazw aplikacji. Importowanie z przestrzeni nazw aplikacji nie daje pełnego obrazu tego, co jest zainstalowane w systemie.
W rezultacie otrzymasz listę pkg_resources.Distribution
obiektów. Zobacz poniższy przykład:
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)",
]
Zrób ich listę:
flat_installed_packages = [package.project_name for package in installed_packages]
[
"Django",
"six",
"requests",
]
Sprawdź, czy requests
jest zainstalowany:
if 'requests' in flat_installed_packages:
# Do something