Проверка версии requests: практические примеры

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

Обзор задачи проверки версии requests

При разработке на Python важно контролировать версии установленных библиотек. Библиотека requests не исключение: от её версии зависит доступность некоторых функций и обратная совместимость. Ниже рассмотрены основные подходы для получения номера версии requests в рабочем окружении.

Наиболее эффективный способ - обратиться к атрибуту __version__ самого модуля. Этот атрибут присутствует в пакетах, которые следуют стандартам упаковки Python.

import requests
print(requests.__version__)

Installing python modules (установка модулей python)

2.31.0

Python requirements (файл requirements.txt в python)

Данный метод работает во всех версиях requests, начиная с самых ранних. Однако если пакет не установлен, возникнет исключение ModuleNotFoundError.

Типичная ошибка: попытка импортировать requests, когда окружение не настроено (отсутствует virtualenv или пакет не установлен). Решение - предварительно установить библиотеку через pip install requests или использовать более мягкий импорт с обработкой ошибки.

Как узнать версию через pip show без импорта?

Если импорт модуля нежелателен (например, в сценариях автоматизации), можно вызвать утилиту pip из командной строки или через подпроцесс.

import subprocess
result = subprocess.run(['pip', 'show', 'requests'], capture_output=True, text=True)
print(result.stdout)

Python requirements file (файл requirements.txt в python)

Name: requests
Version: 2.31.0
...

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

Другой вариант - использовать pip list и отфильтровать строку.

Проблема: pip может не находиться в PATH или быть недоступным внутри виртуального окружения. Для гарантии лучше указывать полный путь к pip (например, sys.executable + ' -m pip show requests').

Как получить версию через pkg_resources (setuptools)?

Классический способ, доступный в старых версиях pip и setuptools. Функция pkg_resources.get_distribution возвращает объект Distribution, у которого есть атрибут version.

import pkg_resources
try:
    version = pkg_resources.get_distribution('requests').version
    print(version)
except pkg_resources.DistributionNotFound:
    print('requests не установлен')

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

В новых версиях setuptools пакет pkg_resources помечен как устаревший, а в Python 3.12+ его может не быть. Рекомендуется использовать importlib.metadata (см. ниже).

Как применить importlib.metadata (современный стандарт)?

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

from importlib.metadata import version, PackageNotFoundError
try:
    ver = version('requests')
    print(ver)
except PackageNotFoundError:
    print('requests не найден')

Python uv install (установка пакетов с помощью uv в python)

2.31.0

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

Этот метод предпочтителен для новых проектов, так как не требует дополнительных зависимостей и поддерживается в Python 3.8+.

Ошибка: если пакет установлен в режиме editable (pip install -e), importlib.metadata может вернуть версию 0.0.0 или неверную. В таких случаях стоит проверять через pip show или атрибут __version__.

Как сравнить версию с требуемой в коде?

Иногда нужно проверить, что версия requests не ниже определённой. Для этого удобно воспользоваться packaging.version или простым парсингом строки.

from importlib.metadata import version
from packaging.version import Version

installed = Version(version('requests'))
required = Version('2.25.0')
if installed >= required:
    print('Версия подходит')
else:
    print('Требуется обновление')

Библиотека packaging может отсутствовать, её нужно установить отдельно (pip install packaging).

- Python файл requirements (файл requirements.txt в python)
- как создать requirements txt файл python (создать файл requirements.txt)

Расширенные примеры проверки версии requests

Проверка версии в виртуальном окружении

Часто проекты используют разные виртуальные окружения. Убедиться, что requests установлен именно в активном окружении, можно через запуск интерпретатора Python с явным указанием пути к исполняемому файлу окружения.

Пример
import sys
import subprocess

venv_python = '/path/to/venv/bin/python'
result = subprocess.run([venv_python, '-c', 'import requests; print(requests.__version__)'],
                       capture_output=True, text=True)
print(result.stdout.strip())

Если requests не установлен, в stderr будет сообщение об ошибке импорта.

Автоматическое обновление requests до актуальной версии

Сценарий: перед запуском приложения проверяется версия, и если она ниже требуемой, выполняется обновление через pip.

Пример
import subprocess
import sys
from importlib.metadata import version, PackageNotFoundError

required = '2.25.0'
try:
    installed = version('requests')
    if installed < required:
        print(f'Обновление requests с {installed} до {required}...')
        subprocess.check_call([sys.executable, '-m', 'pip', 'install', '--upgrade', 'requests'])
except PackageNotFoundError:
    print('Установка requests...')
    subprocess.check_call([sys.executable, '-m', 'pip', 'install', 'requests'])

Такой подход удобен в Docker-контейнерах или CI/CD пайплайнах.

Проверка версии без доступа к командной строке (например, в Jupyter Notebook)

В интерактивной среде можно просто выполнить import requests; requests.__version__.

Пример
import requests
version = requests.__version__
print(f'Установлена версия {version}')
# Проверка минимальной версии для поддержки файловых кусков
if int(version.split('.')[0]) >= 2 and int(version.split('.')[1]) >= 20:
    print('Поддержка multipart-загрузки доступна')

Использование pip list в JSON-формате

Можно получить данные в машиночитаемом виде и затем распарсить.

Пример
import json
import subprocess

result = subprocess.run([sys.executable, '-m', 'pip', 'list', '--format=json'],
                       capture_output=True, text=True)
packages = json.loads(result.stdout)
for pkg in packages:
    if pkg['name'].lower() == 'requests':
        print(pkg['version'])
        break

Этот способ полезен, если нужно проверить сразу несколько библиотек.

Проверка версии внутри исключения при импорте

Иногда код должен работать с разными версиями requests, и некоторые атрибуты отсутствуют. Лучше импортировать базовый модуль и проверять версию.

Пример
try:
    import requests
    ver = requests.__version__
    major, minor, *_ = map(int, ver.split('.'))
    if major == 2 and minor < 25:
        # Обходной код для старых версий
        print('Работаем в режиме совместимости')
except ModuleNotFoundError:
    print('requests не установлен, функциональность недоступна')

Проверка версии во время выполнения тестов (pytest)

В тестовых сценариях можно пропускать тесты, если версия requests не подходит.

Пример
import pytest
from importlib.metadata import version

requests_version = version('requests')
pytestmark = pytest.mark.skipif(
    requests_version < '2.25',
    reason='Требуется requests >= 2.25'
)

def test_something():
    # тест, который зависит от новой функциональности
    pass

Так тестирование становится гибким.

Проверка версии библиотеки requests в Python - comments

En
Requests python versions (python)