uv — быстрый менеджер пакетов Python
Что такое uv
uv — менеджер пакетов Python, написанный на Rust. Решает одну проблему: стандартный pip медленно разрешает зависимости, а poetry добавляет свою модель проектов поверх PEP 621. uv работает поверх pyproject.toml, совместим с PEP 621 и PEP 508, и делает это в разы быстрее.
Под капотом — кэширующий резолвер на Rust, который переиспользует данные из pip-совместимых индексов (PyPI по умолчанию). uv может заменить pip, pip-tools, virtualenv и poetry в одном инструменте.
uv не требует установленного Python для установки самого себя, но для работы с проектами Python — нужен интерпретатор. uv умеет находить и управлять CPython через uv python.
Установка
Самый быстрый путь — curl-скрипт:
Это кладёт бинарник в ~/.local/bin. Для системы без curl:
Или скачать standalone-бинарник с GitHub releases.
После установки проверяем версию:
Если uv не найден после установки — убедитесь, что ~/.local/bin в $PATH. В Debian/Ubuntu пакет ставится в /usr/local/bin при установке через pip.
Основные команды
Цикл работы с проектом:
Ключевые флаги для повседневной работы:
| Флаг | Что делает |
|---|---|
--system | Устанавливает пакет в системный Python, минуя venv |
--no-dev | Не включает dev-зависимости при синхронизации |
--group <name> | Указывает именованную группу зависимостей |
--python <version> | Выбирает конкретную версию интерпретатора |
--locked | Использует lock-файл без перерезолва |
--quiet | Минимальный вывод |
--verbose | Подробный вывод для дебага |
Управление интерпретаторами:
Для пакетной работы без создания проекта:
uv sync пересоздаёт .venv и устанавливает ровно то, что в uv.lock. Это делает его пригодным для CI — результат детерминирован.
Сравнение с pip и poetry
| Аспект | pip | poetry | uv |
|---|---|---|---|
| Язык реализации | Python | Python + Rust | Rust |
| Модель проектов | setup.py / pyproject.toml | pyproject.toml (свой формат) | pyproject.toml (PEP 621) |
| Скорость резолва | Медленная | Средняя | Быстрая |
| Lock-файл | Нет нативного | poetry.lock | uv.lock |
| Виртуальное окружение | venv / virtualenv | встроенное | встроенное (.venv) |
| Совместимость с pip | Полная | Частичная | Полная |
| Замена pip | — | — | Да |
| Замена poetry | — | — | Да (частично) |
uv выигрывает на скорости резолва — в бенчмарках astral-sh он быстрее pip в 10–50 раз на крупных dependency graphs. При этом uv pip полностью совместим с pip-воркфлоу: requirements.txt, --index-url, --find-links.
uv активно развивается. Формат uv.lock может меняться между мажорными версиями. В продакшен-цепочках CI фиксируйте версию uv через uv --version или установку конкретного бинарника.
Типичная ошибка — путать uv add и uv pip install. Первый пишет зависимость в pyproject.toml и обновляет uv.lock, второй работает как pip напрямую. Для проектов с pyproject.toml используйте uv add. Для одноразовых скриптов и Docker-файтов — uv pip install.
Ещё одна частая проблема: uv не находит интерпретатор, если Python установлен в нестандартный путь. Решение — uv python install --force или явное указание через --python /path/to/python.