Методы проверки установленных модулей и пакетов Python

Раздел: Администрирование -> Управление зависимостями

Способы проверки установленных пакетов

Как быстро получить список всех установленных библиотек с версиями?

Наиболее эффективное решение для базовой проверки - встроенная утилита pip. Команда pip list выводит имена и версии всех установленных пакетов в текущем окружении. Для экспорта зависимостей в файл используется pip freeze. Эти команды являются стандартом при работе с Python.

pip list\npip freeze

Requests python versions (проверка версии библиотеки requests в python)

Типичная проблема: если в окружении много пакетов, вывод может быть объёмным. Для фильтрации используйте pip list | grep numpy (Windows: findstr numpy).

Ошибка: команда не найдена - вероятно, pip не установлен или не добавлен в PATH. Решение: переустановить pip или использовать python -m pip list.

Как проверить версию конкретной библиотеки?

Используйте pip show имя_пакета. Она отобразит детальную информацию: версию, автора, зависимости, лицензию и путь установки.

pip show requests

Python get requirements (получение списка зависимостей requirements.txt в python)

Проблема: если пакет не установлен, команда вернёт пустой результат или сообщение о ненайденном пакете. Проверьте имя с учётом регистра (обычно строчные).

Как проверить целостность зависимостей и наличие конфликтов?

Команда pip check анализирует все установленные пакеты на предмет отсутствующих зависимостей или несовместимостей версий. Это полезно при обновлении пакетов.

pip check

проверить библиотеки python (проверка установленных библиотек python)

Ошибка: при обнаружении конфликта pip выводит сообщение с указанием каких пакетов не хватает. Решение: установить недостающие пакеты (pip install отсутствующий-пакет) или понизить версию конфликтующего.

Как визуализировать дерево зависимостей?

Утилита pipdeptree (устанавливается отдельно) показывает иерархию зависимостей. Она позволяет увидеть, какие пакеты тянут за собой другие.

pip install pipdeptree\npipdeptree\npipdeptree --packages numpy  # показать дерево для конкретного пакета

No matching distribution found for python (решение ошибки «no matching distribution found» при установке пакетов python)

Проблема: если не установлен graphviz, опция графического вывода не сработает. Можно использовать текстовый режим.

Как проверить библиотеки программно из кода Python?

Модуль pkg_resources из setuptools позволяет получить список установленных пакетов и версий внутри скрипта.

import pkg_resources\ninstalled = sorted([(d.key, d.version) for d in pkg_resources.working_set], key=lambda x: x[0])\nfor name, ver in installed:\n    print(f"{name}=={ver}")

сделать requirements python (создание requirements.txt для python)

Ошибка: если setuptools не установлен, модуль отсутствует. Обычно он есть в стандартной установке Python. Альтернатива - использовать importlib.metadata (Python 3.8+).

Как проверить, что все зависимости из requirements.txt установлены и совпадают по версиям?

Сравните pip freeze с содержимым файла. Напишите небольшой скрипт для автоматической проверки.

pip freeze > installed.txt\ndiff installed.txt requirements.txt  # или в Windows: fc installed.txt requirements.txt

Проблема: pip freeze может выводить больше пакетов, чем перечислено в requirements (из-за транзитивных зависимостей). Для точного сравнения лучше использовать пакет pip-tools.

- Installing python modules (установка модулей python)
- Python requirements (файл requirements.txt в python)
- Python requirements file (файл requirements.txt в python)

Расширенные примеры проверки библиотек

Полный скрипт для сверки установленных пакетов с requirements.txt

Скрипт на Python читает файл requirements.txt, извлекает имена и версии, затем сравнивает с установленными пакетами через pkg_resources. Выводит несоответствия.

Пример

import pkg_resources
import re

def parse_requirements(filename):
    with open(filename, 'r') as f:
        lines = f.readlines()
    requirements = {}
    for line in lines:
        line = line.strip()
        if line and not line.startswith('#'):
            match = re.match(r'^([a-zA-Z0-9_.-]+)\s*([><=!~]*)\s*([0-9a-zA-Z.]+)?', line)
            if match:
                name = match.group(1).lower()
                op = match.group(2) if match.group(2) else ''
                ver = match.group(3) if match.group(3) else ''
                requirements[name] = (op, ver)
    return requirements

def main():
    reqs = parse_requirements('requirements.txt')
    installed = {d.key.lower(): d.version for d in pkg_resources.working_set}
    mismatches = []
    for name, (op, req_ver) in reqs.items():
        if name not in installed:
            mismatches.append(f"Пакет {name} не установлен")
        elif op and req_ver:
            installed_ver = installed[name]
            # простая проверка на равенство
            if op == '==' and installed_ver != req_ver:
                mismatches.append(f"{name}: требуется {op}{req_ver}, установлен {installed_ver}")
            # можно расширить для других операторов
        else:
            # без версии – просто проверяем наличие
            pass
    if mismatches:
        for msg in mismatches:
            print(msg)
    else:
        print("Все зависимости соответствуют требованиям.")

if __name__ == '__main__':
    main()
# Пример вывода при наличии несоответствия:
# Пакет numpy не установлен
# requests: требуется ==2.25.1, установлен 2.28.1

Анализ дерева зависимостей с помощью pipdeptree

Установите pipdeptree и используйте его для поиска циклических зависимостей или версионирования.

Пример

pip install pipdeptree
pipdeptree --warn silent 2>/dev/null  # скрыть предупреждения
pipdeptree --packages django --depth 2  # только для Django и его прямых зависимостей
Django==4.2.1
  - asgiref [required: >=3.6.0, installed: 3.7.2]
  - sqlparse [required: >=0.3.1, installed: 0.4.4]
  - tzdata [required: Any, installed: 2023.3]

Программная проверка версии конкретного пакета через importlib.metadata

Начиная с Python 3.8, можно использовать importlib.metadata (без дополнительных зависимостей).

Пример

try:
    from importlib.metadata import version, PackageNotFoundError
    import sys

    def check_package(pkg_name):
        try:
            ver = version(pkg_name)
            print(f"{pkg_name} версия {ver}")
        except PackageNotFoundError:
            print(f"{pkg_name} не установлен")

    check_package("requests")
    check_package("nonexistent")
except ImportError:
    print("importlib.metadata доступен только в Python 3.8+")
requests версия 2.31.0
nonexistent не установлен

Проверка библиотек в виртуальном окружении с параллельными версиями Python

Если установлено несколько версий Python, убедитесь, что pip относится к нужной.

Пример

python3.10 -m pip list
python3.11 -m pip list
# Сравните списки
python3.10 -m pip freeze > freeze310.txt
python3.11 -m pip freeze > freeze311.txt
diff freeze310.txt freeze311.txt

Использование pip для проверки устаревших пакетов

Команда pip list --outdated показывает пакеты, для которых есть более новые версии.

Пример

pip list --outdated
# Пример вывода:
# Package   Version Latest Type
# --------- ------- ------ -----
# pip       22.3.1  23.3   wheel
# setuptools 65.5.0 68.0.0 wheel

Для обновления всех устаревших пакетов используйте pip list --outdated --format=freeze | cut -d= -f1 | xargs pip install -U (осторожно – может сломать окружение).

Проверка установленных библиотек Python - comments

En
проверить библиотеки python (python)