Оновлена відповідь
Кращий спосіб зробити це:
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
Чому саме так? Іноді виникають зіткнення з назвою програми. Імпорт із простору імен додатків не дає повного уявлення про те, що встановлено в системі.
Зауважте, що запропоноване рішення працює:
- Під час використання pip для встановлення з PyPI або з будь-якого іншого альтернативного джерела (наприклад,
pip install http://some.site/package-name.zip
або будь-якого іншого типу архіву).
- При установці вручну з використанням
python setup.py install
.
- При установці з системних сховищ, наприклад
sudo apt install python-requests
.
Випадки, коли це може не працювати:
- При установці в режимі розробки, як
python setup.py develop
.
- При установці в режимі розробки, як
pip install -e /path/to/package/source/
.
Стара відповідь
Кращий спосіб зробити це:
import pip
installed_packages = pip.get_installed_distributions()
Для pip> = 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