CUP от Baidu заменяет десятки Python фреймворков одной зависимостью
Компания Baidu развивает библиотеку CUP (Common Useful Python library), которая собирает в одном пакете десятки утилит для повседневной Python-разработки: от логирования и управления конфигурацией до многопоточности и мониторинга ресурсов, и этот набор заменяет сразу несколько отдельных зависимостей.

CUP решает проблему «зоопарка библиотек»: вместо того чтобы подбирать отдельный пакет под логи, отдельный под кеш, отдельный под потоки, разработчик ставит одну зависимость и получает единый API для всех базовых задач.
Если вы пишете на Python скрипты автоматизации, парсеры или бэкенд-сервисы и каждый раз тратите время на подбор мелких утилит, CUP может сократить этот этап до одной команды установки. Ниже разберём, что внутри, как поставить и как применить основные модули на практике.
Что понадобится?
- Python 3.x (библиотека проверяет версию через встроенный модуль
cup.platforms) - pip, менеджер пакетов Python
- Google Colab или локальная среда с терминалом (инструкция проверена в Colab)
- Linux-окружение для модулей мониторинга ресурсов и файловых блокировок (на macOS и Windows часть функций будет недоступна)
- Примерно 30 минут на установку и первый прогон всех модулей
Пошаговая инструкция
1. Установите CUP и проверьте окружение
Откройте терминал или ячейку Colab и выполните:
pip install -q cup pytz
Затем убедитесь, что библиотека встала корректно:
import cup
from cup import platforms
print("CUP version:", getattr(cup, "__version__", "unknown"))
print("is_linux:", platforms.is_linux())
print("is_py3:", platforms.is_py3())
Модуль platforms сразу показывает, на какой ОС вы работаете. Это полезно, потому что некоторые функции CUP работают только под Linux.
2. Настройте структурированное логирование
CUP умеет писать логи одновременно в файл и в консоль с ротацией (автоматическим разбиением файла при достижении заданного размера). Ротация логов означает, что когда файл вырастает до указанного лимита, библиотека создаёт новый файл, а старый архивирует:
from cup import log
import tempfile, os
LOGFILE = os.path.join(tempfile.gettempdir(), "cup_tutorial.log")
log.init_comlog(
"cup_tutorial", # имя логгера
log.INFO, # минимальный уровень
LOGFILE, # путь к файлу
log.ROTATION, # включить ротацию
10 * 1024 * 1024, # максимум 10 МБ на файл
True, # печатать в stdout
False, # не печатать в stderr
)
log.info("Запись в файл и в консоль одновременно")
log.warning("Предупреждение")
log.info_if(2 > 1, "Условный лог: выведется, если условие истинно")
Метод info_if удобен для отладки: лог-запись появляется только при выполнении условия, не нужно оборачивать каждый вызов в if.
3. Используйте встроенные декораторы
CUP предлагает несколько декораторов (обёрток, которые добавляют поведение к функциям и классам без изменения их кода):
from cup import decorators
@decorators.Singleton
class AppConfig:
def __init__(self):
self.created_at = __import__("time").time()
a, b = AppConfig(), AppConfig()
print("a is b:", a is b) # True: объект создаётся ровно один раз
Декоратор Singleton гарантирует, что класс создаст только один экземпляр. Для конфигурации приложения это типовая задача.
Декоратор TraceUsedTime замеряет время выполнения функции:
@decorators.TraceUsedTime(
b_print_stdout=True,
enter_msg="начало вычисления",
leave_msg="конец вычисления",
)
def heavy_compute():
import time
time.sleep(0.2)
return sum(range(200000))
print("Результат:", heavy_compute())
4. Загрузите вложенную конфигурацию из файла
Модуль cup.util.conf умеет читать конфигурационные файлы с секциями, подсекциями и повторяющимися ключами, а затем превращать их в обычный Python-словарь:
from cup.util import conf
cfg = conf.Configure2Dict("config.conf", separator=":").get_dict()
print(cfg["host"])
print(cfg["monitor"]["thresholds"]["cpu_max"])
Конфигурацию можно изменить в коде и записать обратно:
cfg["port"] = "10085"
conf.Dict2Configure(cfg, separator=":").write_conf("config_new.conf")
Цикл «прочитал, изменил, сохранил» работает без сторонних библиотек вроде PyYAML или TOML.
5. Подключите кеш и генерацию идентификаторов
Встроенный KV-кеш (хранилище «ключ-значение» в оперативной памяти) поддерживает TTL (время жизни записи):
from cup import cache
kv = cache.KVCache(name="demo")
kv.set({"user:1": "alice"}, expire_sec=2)
print(kv.get("user:1")) # "alice"
# через 2 секунды ключ исчезнет автоматически
Для автоматизации и парсинга часто нужны уникальные идентификаторы. CUP предлагает генератор прямо из коробки, без подключения отдельных пакетов.
6. Запустите пул потоков
Модуль cup.thread даёт готовый пул потоков (механизм для параллельного выполнения нескольких задач):
from cup import thread
pool = thread.ThreadPool(num_threads=4)
# добавляйте задачи в пул через его API
Для задач, которые нужно прервать по таймауту, CUP предлагает «прерываемые потоки», этот функционал обычно приходится реализовывать вручную или искать в сторонних пакетах.
Что делать с этим прямо сейчас, по ролям
Разработчику-автоматизатору. Если вы пишете скрипты для парсинга, мониторинга или ETL-пайплайнов на Python, попробуйте заменить связку logging + cachetools + concurrent.futures на CUP. Один pip install cup вместо трёх-четырёх зависимостей.
Автору Дзена, который учится кодить. CUP подходит как учебный фреймворк для Python: код примеров короткий, модули покрывают реальные задачи от логов до потоков. Статья-разбор с примерами кода хорошо собирает техническую аудиторию.
Предпринимателю и тимлиду. Библиотека опенсорсная (с открытым исходным кодом), лицензия позволяет использовать в коммерческих проектах. Но учтите: часть модулей (мониторинг ресурсов, файловые блокировки) работает только под Linux.
На входе: функция, которая считает сумму диапазона и спит 0,2 секунды, обёрнутая в TraceUsedTime.
На выходе в консоли:
начало вычисления
конец вычисления
Результат: 19999900000
Плюс в лог-файле появляется строка с временной меткой, уровнем и текстом сообщения. Метод log.parse() разбирает эту строку обратно в словарь с полями loglevel, date, time, pid, msg, что удобно для автоматического анализа логов.
- Запуск Linux-модулей на Windows или macOS. Декоратор
@needlinuxявно блокирует вызов, но модули мониторинга ресурсов и файловых блокировок просто упадут с ошибкой. Проверяйтеplatforms.is_linux()перед вызовом. - Забытый TTL в кеше. Если не указать
expire_sec, запись живёт вечно и память не освобождается. Для скриптов с длинным циклом жизни это утечка. - Конфигурация с неправильным разделителем.
Configure2Dictпринимает параметрseparator. Если в файле используется двоеточие, а вы передали=, парсер не найдёт значения. Ошибка молчаливая, словарь просто будет пустым. - Путаница с версией. Атрибут
__version__может отсутствовать в старых сборках. Код из туториала обрабатывает этот случай черезgetattrс запасным вариантом, повторите эту логику у себя.
CUP, это не замена Django или FastAPI. Это набор утилит нижнего уровня, ближе по духу к boltons или toolz. Главное преимущество: всё собрано в одном месте и протестировано внутри Baidu на масштабах, которые мало кому снились.
Из минусов: документация на английском скудная, на русском её нет совсем. Сообщество маленькое: на GitHub у проекта немного звёзд, и обновления выходят нерегулярно. Для критичного продакшена я бы держал запасной план на стандартные Python-библиотеки.
Из доступных в РФ альтернатив: стандартная библиотека Python покрывает логирование (logging), потоки (threading, concurrent.futures) и кеширование (functools.lru_cache). Но если вам нужен единый API с вложенными конфигами и условным логированием, CUP экономит время на склейке.
Библиотека ставится одной командой и не требует регистрации или API-ключей. Если вы давно искали компактный фреймворк для Python, который закрывает рутинные задачи без десятка зависимостей, CUP стоит попробовать на тестовом проекте, прежде чем тянуть в продакшен.

Основатель dzen.guru. Эксперт по монетизации и продвижению на Дзен. Автор курса «Старт на Дзен 2026».
Читайте также

Wayve оценена в $8,5 млрд: автономные автомобили без HD-карт привлекли инженеров и инвесторов
Британский стартап Wayve, разрабатывающий технологии для автономных автомобилей, предложил сотрудникам продать часть принадлежащих им акций через тендерное…

Google выложила TabFM: нейросети для табличных данных больше не требуют настройки
Google Research представила TabFM, фундаментальную нейросеть для табличных данных, которая выдаёт прогнозы по незнакомым таблицам без обучения, настройки…

Трамп снял экспортный запрет на Claude Anthropic: доступ вернётся с 1 июля
Почему это важно Впервые экспортные ограничения на передовые ИИ-модели были введены и сняты в течение трёх недель, причём под давлением азиатских конкурентов.…
Комментарии