Способы получения перечня установленных модулей в Python
Основные методы получения списка установленных библиотек Python
Какая команда предоставляет перечень всех установленных пакетов в стандартном виде?
Наиболее часто используемый способ - команда pip list. Она показывает все пакеты, установленные в текущем окружении Python, вместе с их версиями. Вывод по умолчанию - таблица с колонками Package и Version.
pip listкак узнать библиотеки python (как узнать установленные библиотеки python)
Данная команда выводит список, например:
Package Version ---------- ------- numpy 1.24.2 requests 2.28.2 ...
Для получения более структурированного вывода можно использовать опцию --format:
pip list --format=json
Этот вариант полезен для программной обработки данных.
Типичные проблемы: Если команда pip не найдена, вероятно, Python не добавлен в PATH. Решение - переустановить Python с опцией добавления в PATH или использовать полный путь к pip. Также возможна путаница между глобальным и виртуальным окружением - рекомендуется всегда активировать нужное окружение.
Как получить список пакетов в формате, пригодном для сохранения в requirements.txt?
Команда pip freeze выводит установленные пакеты в формате, который можно напрямую сохранить в файл requirements.txt. Отличие от pip list в том, что pip freeze показывает пакеты с указанием версий через оператор == и не включает пакеты, установленные в режиме editable (с флагом -e).
pip freeze
Пример вывода:
numpy==1.24.2 requests==2.28.2
Для сохранения в файл используется перенаправление:
pip freeze > requirements.txt
Возможная ошибка: Если в окружении присутствует пакет, установленный в режиме -e (editable), pip freeze покажет его в виде строки -e git+...#egg=Package, что не всегда подходит для воспроизведения. В таких случаях рекомендуется вывод очищать вручную или использовать pip list --format=freeze, но результат аналогичный.
Как увидеть детальную информацию о конкретном пакете?
Для вывода сведений об одном пакете применяется команда pip show с указанием имени пакета. Это полезно для проверки версии, зависимостей, лицензии и т.д.
pip show numpy
Пример результата:
Name: numpy Version: 1.24.2 Summary: NumPy is the fundamental package for array computing with Python. ...
Ошибка: Если пакет не найден, возникает ошибка WARNING: Package(s) not found: numpy. Необходимо убедиться в правильности имени.
Как программно получить список установленных пакетов внутри кода Python (без вызова внешней команды)?
Начиная с Python 3.8, для этого можно использовать модуль importlib.metadata. Он предоставляет функции distributions() или packages_distributions() для перечисления установленных дистрибутивов. Это более современный способ по сравнению с pkg_resources.
import importlib.metadata as md
for dist in md.distributions():
print(dist.metadata['Name'], dist.version)
Результат - список имён и версий.
Проблемы: Для Python ниже 3.8 модуль importlib.metadata недоступен; можно использовать его backport importlib-metadata или перейти на pkg_resources. Также возможны ошибки доступа при отсутствии метаданных.
Как получить список пакетов с помощью pkg_resources (для старых версий или при использовании setuptools)?
Библиотека pkg_resources из пакета setuptools предоставляет функцию working_set для перечисления установленных пакетов.
import pkg_resources
for dist in pkg_resources.working_set:
print(dist.project_name, dist.version)
Этот подход работает во многих версиях Python, но считается устаревшим.
Проблема: Если setuptools не установлен, возникнет ошибка импорта. Рекомендуется сначала проверить наличие модуля.
Как в среде conda (Anaconda) вывести список установленных пакетов?
Для дистрибутива Anaconda и менеджера пакетов conda используется команда conda list. Она показывает все пакеты, установленные через conda, а также pip (если они были установлены в окружении).
conda list
Ошибка: Команда conda может быть не распознана, если conda не добавлен в PATH. Решение - запускать команду из Anaconda Prompt.
Как выполнить команду pip list из Python-скрипта и обработать её вывод?
Иногда требуется получить список пакетов, вызвав внешний процесс pip. Для этого используется модуль subprocess.
import subprocess
import json
result = subprocess.run(['pip', 'list', '--format=json'], capture_output=True, text=True)
packages = json.loads(result.stdout)
for pkg in packages:
print(pkg['name'], pkg['version'])
Этот метод работает в любом окружении, где доступен pip, но зависит от внешней команды.
Проблема: Вывод может быть большим, и обработка stdout может занять время. Также необходимо обрабатывать ошибки, если pip не найден (возвращает код 127).
Расширенные примеры и нестандартные сценарии
# 1. Вывод списка устаревших пакетов
pip list --outdated
Package Version Latest Type numpy 1.24.2 1.25.0 wheel requests 2.28.2 2.31.0 wheel
# 2. Фильтрация пакетов по имени (только те, что начинаются с 'py')
pip list | findstr "^py"
На Unix системах вместо findstr используется grep.
# 3. Получение списка пакетов без зависимостей (флаг --not-required)
pip list --not-required
Показывает только пакеты, которые не являются зависимостями других пакетов.
# 4. Сравнение двух окружений (с помощью JSON и сортировки)
pip list --format=json --path=/path/to/env1 > env1.json
pip list --format=json --path=/path/to/env2 > env2.json
# Затем в Python загрузить и сравнить
# 5. Использование importlib.metadata для получения метаданных
import importlib.metadata as md
pkg = md.distribution('numpy')
print(pkg.version)
print(pkg.metadata['Requires-Dist'])
# 6. Создание скрипта для генерации словаря {package: version}
import importlib.metadata as md
packages = {dist.metadata['Name']: dist.version for dist in md.distributions()}
import json
print(json.dumps(packages, indent=2))
{
"numpy": "1.24.2",
"requests": "2.28.2",
...
}
# 7. Обработка ошибок при использовании subprocess
import subprocess, json, sys
try:
result = subprocess.run(['pip', 'list', '--format=json'], capture_output=True, text=True, check=True)
except subprocess.CalledProcessError as e:
print(f'Ошибка выполнения pip: {e.stderr}', file=sys.stderr)
else:
packages = json.loads(result.stdout)
for pkg in packages:
print(f'{pkg["name"]} == {pkg["version"]}')
# 8. Перечисление пакетов, установленных в режиме editable (pip list --editable)
pip list --editable