Перейти к содержимому

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-скрипт:

curl -LsSf https://astral.sh/uv/install.sh | sh

Это кладёт бинарник в ~/.local/bin. Для системы без curl:

pip install uv

Или скачать standalone-бинарник с GitHub releases.

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

uv --version
Предупреждение

Если uv не найден после установки — убедитесь, что ~/.local/bin в $PATH. В Debian/Ubuntu пакет ставится в /usr/local/bin при установке через pip.

Основные команды

Цикл работы с проектом:

uv init myproject          # создаёт pyproject.toml с PEP 621-метаданными
cd myproject
uv add requests            # добавляет зависимость и обновляет uv.lock
uv add --group dev pytest  # добавляет зависимость в именованную группу
uv sync                    # синхронизирует окружение с lock-файлом
uv run pytest              # запускает команду в .venv проекта

Ключевые флаги для повседневной работы:

ФлагЧто делает
--systemУстанавливает пакет в системный Python, минуя venv
--no-devНе включает dev-зависимости при синхронизации
--group <name>Указывает именованную группу зависимостей
--python <version>Выбирает конкретную версию интерпретатора
--lockedИспользует lock-файл без перерезолва
--quietМинимальный вывод
--verboseПодробный вывод для дебага

Управление интерпретаторами:

uv python list             # показывает найденные CPython
uv python install 3.12     # скачивает и кэширует CPython 3.12
uv python find             # показывает путь к используемому Python

Для пакетной работы без создания проекта:

uv pip install requests    # аналог pip, но быстрее
uv pip freeze              # вывод установленных пакетов
uv pip uninstall requests  # удаление
Подсказка

uv sync пересоздаёт .venv и устанавливает ровно то, что в uv.lock. Это делает его пригодным для CI — результат детерминирован.

Сравнение с pip и poetry

Аспектpippoetryuv
Язык реализацииPythonPython + RustRust
Модель проектовsetup.py / pyproject.tomlpyproject.toml (свой формат)pyproject.toml (PEP 621)
Скорость резолваМедленнаяСредняяБыстрая
Lock-файлНет нативногоpoetry.lockuv.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.