Обновленный ответ
Лучший способ сделать это:
import subprocess
import sys
reqs = subprocess.check_output([sys.executable, '-m', 'pip', 'freeze'])
installed_packages = [r.decode().split('==')[0] for r in reqs.split()]
Результат:
print(installed_packages)
[
"Django",
"six",
"requests",
]
Проверьте, установлен ли requests
:
if 'requests' in installed_packages:
# Do something
Почему так? Иногда вы сталкиваетесь с именами приложений. Импорт из пространства имен приложения не дает полной картины того, что установлено в системе.
Старый ответ
Лучший способ сделать это:
import pip
installed_packages = pip.get_installed_distributions()
Для пунктов> = 10.x используйте:
from pip._internal.utils.misc import get_installed_distributions
Почему так? Иногда вы сталкиваетесь с именами приложений. Импорт из пространства имен приложения не дает полной картины того, что установлено в системе.
В результате вы получите список pkg_resources.Distribution
объектов. В качестве примера смотрите следующее:
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)",
]
Составьте список:
flat_installed_packages = [package.project_name for package in installed_packages]
[
"Django",
"six",
"requests",
]
Проверьте, установлен ли requests
:
if 'requests' in flat_installed_packages:
# Do something