Способы получения перечня установленных модулей в 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

Как узнать установленные библиотеки Python - comments

En
как узнать библиотеки python (python)