Перейти к содержанию

Опциональные зависимости

Библиотека chutils спроектирована по принципу минимального ядра: базовая установка (pip install chutils) включает только самые необходимые пакеты. Расширенная функциональность активируется через опциональные группы зависимостей (extras).


Быстрая установка

# Минимальная установка (ядро)
pip install chutils

# Одна дополнительная группа
pip install "chutils[rich]"

# Несколько групп сразу
pip install "chutils[rich,secrets,crypto]"

# Всё включено
pip install "chutils[full]"

Карта зависимостей по модулям

В таблице ниже указано, какая группа (extra) требуется для каждого модуля или функции. Если группа не установлена, будет выброшено исключение OptionalDependencyError или функциональность будет автоматически деградирована (отмечено иконкой ⚡).

Extra Пакет Модули и функции Поведение при отсутствии
secrets keyring >=25.7 chutils.secret_manager — провайдер KeyringProvider SecretManager автоматически отключает KeyringProvider и работает только через Env / DotEnv. Однократное предупреждение в логах.
aws boto3 >=1.34 chutils.secret_manager — провайдер AWSSecretManagerProvider OptionalDependencyError при попытке использовать AWSSecretManagerProvider без boto3
gcp google-cloud-secret-manager >=2.20 chutils.secret_manager — провайдер GCPSecretManagerProvider OptionalDependencyError при попытке использовать GCPSecretManagerProvider без SDK
pydantic pydantic >=2.13 chutils.config.get_config() (параметр model), chutils.config.get_config_value() (параметр model), chutils.config.export_schema(), chutils.config.import_model_class(), chutils.config.generate_yaml_template(), chutils.config.generate_env_template(), chutils.config.generate_json_schema(), CLI: chutils validate, chutils template OptionalDependencyError при вызове
watch watchdog >=6.0 chutils.config.start_config_watcher() OptionalDependencyError при вызове
rich rich >=15.0 chutils.logger — Rich-форматирование логов, chutils.cli — красивый вывод CLI, chutils.cli_utils.get_console() ⚡ Автоматический fallback на стандартный logging.StreamHandler и простой текстовый вывод
json python-json-logger >=3.2 chutils.logger — JSON-формат логов (ChutilsJsonFormatter) ⚡ JSON-форматирование недоступно; используется стандартный текстовый формат
date python-dateutil >=2.9 chutils.time.parse_datetime() ⚡ Парсинг дат ограничен стандартным datetime.fromisoformat()
metrics prometheus-client >=0.20 chutils.metrics.prometheus — класс PrometheusMetrics OptionalDependencyError при инициализации
text rapidfuzz >=3.9 chutils.text.is_significant_difference() OptionalDependencyError при вызове
crypto cryptography >=42.0 chutils.cryptoencrypt_portable(), decrypt_portable(), encrypt_file(), decrypt_file() OptionalDependencyError при вызове
web httpx >=0.27 chutils.webWebClient, AsyncWebClient, ProxyPool, UserAgentRotator; умный HTTP-клиент с ротацией прокси и User-Agent OptionalDependencyError при вызове
websockets websockets >=14.0 chutils.http.streamingAsyncWebSocketClient, WebSocketClient; клиенты для работы с WebSockets OptionalDependencyError при вызове
captcha httpx >=0.27 chutils.scraping.captcha — клиенты RuCaptcha/2Captcha, Anti-Captcha, CapMonster Cloud (RuCaptchaSolver, AntiCaptchaSolver, CapMonsterSolver) OptionalDependencyError при вызове
scraping playwright >=1.49, selenium >=4.27 chutils.scraping.humanize — имитация поведения человека (мышь, клавиатура, паузы), анти-детекция (apply_antidetect_playwright, apply_antidetect_selenium) OptionalDependencyError при вызове
otel opentelemetry-api, opentelemetry-sdk, opentelemetry-exporter-otlp (все >=1.41) chutils.tracingsetup_tracing(), @traced, get_tracer() ⚡ Декоратор @traced становится no-op (просто возвращает оригинальную функцию). get_tracer() возвращает None.
testing pytest >=9.0 chutils.testing — фикстуры для тестов (temp_config, mock_secret_manager и др.) ImportError при попытке импорта
full Все вышеперечисленные Вся функциональность

Типы поведения при отсутствии зависимости

⚡ Изящная деградация (Graceful Degradation)

Модули, отмеченные значком ⚡, не выбрасывают ошибку при отсутствии зависимости. Вместо этого они автоматически переключаются на более простой, встроенный вариант работы:

# rich не установлен — вывод будет простым текстом, без ошибок
from chutils.cli_utils import get_console

console = get_console()  # вернёт fallback-обёртку

OptionalDependencyError

Модули без пометки ⚡ выбрасывают специализированное исключение при попытке использования недоступной функциональности:

from chutils.exceptions import OptionalDependencyError

try:
    from chutils.crypto import encrypt_portable

    result = encrypt_portable("секретные данные", "seed")
except OptionalDependencyError as e:
    print(f"Ошибка: {e.message}")
    print(f"Совет: {e.hint}")
    # Ошибка: Required package 'cryptography' is not installed.
    # Совет: pip install chutils[crypto]

Рекомендации по выбору

Сценарий Рекомендуемая установка
Микросервис с YAML-конфигом pip install chutils
Проект с красивым CLI-выводом pip install "chutils[rich]"
Проект с секретами в системном хранилище pip install "chutils[secrets]"
Проект с Pydantic-моделями конфигурации pip install "chutils[pydantic]"
Автоматический hot-reload конфигурации pip install "chutils[watch]"
Шифрование конфиденциальных данных pip install "chutils[crypto]"
Мониторинг метрик через Prometheus pip install "chutils[metrics]"
Нечёткое сравнение текстов pip install "chutils[text]"
Распределённая трассировка (OpenTelemetry) pip install "chutils[otel]"
Умный HTTP-клиент с ротацией proxy/UA pip install "chutils[web]"
Интеграция с решателями капчи pip install "chutils[captcha]"
Автоматизация браузера / анти-детекция pip install "chutils[scraping]"
Полная установка для разработки pip install "chutils[full]"

Последнее обновление карты зависимостей: 2026-07-16 (для версии 3.1.0).