lenec ru

← все посты

uv vs pip: новый менеджер пакетов Python — стоит ли переходить в 2026

10K

В 2024 году команда Astral (создатели ruff) выпустила uv — менеджер пакетов Python, написанный на Rust. За полтора года он дорос до стабильной версии и претендует на замену pip, pip-tools, virtualenv и даже poetry. Разберём, что он умеет, насколько быстрее и когда переход оправдан.

Что такое uv

uv — это единый инструмент, который заменяет целый зоопарк:

  • pip — установка пакетов
  • pip-tools (pip-compile / pip-sync) — lock-файлы
  • virtualenv / venv — создание окружений
  • pyenv — управление версиями Python

Написан на Rust, использует собственный резолвер зависимостей с параллельным скачиванием и агрессивным кэшированием. Полностью совместим с PyPI и стандартами PEP 517/518/621.

Бенчмарк: скорость установки

Тест на реальном проекте (Django + DRF + Celery + psycopg2 + boto3, ~120 зависимостей). Холодный старт (без кэша), MacBook M2:

# pip 24.0
$ time pip install -r requirements.txt
# real 38.2s

# poetry 1.8
$ time poetry install
# real 52.1s (с резолвом)

# uv 0.5
$ time uv pip install -r requirements.txt
# real 4.1s

uv быстрее pip в 9 раз, poetry — в 12 раз. С горячим кэшем разница ещё больше: uv ставит за 0.8 секунды (pip — 12 секунд). Секрет — параллельное скачивание, zero-copy распаковка и глобальный кэш пакетов с hardlink в venv.

Совместимость: форматы и lockfile

uv работает с привычными форматами без миграции:

  • requirements.txt — читает и генерирует
  • pyproject.toml (PEP 621) — нативная поддержка
  • uv.lock — собственный lockfile (кросс-платформенный, с хешами)
# Создать lockfile из pyproject.toml
$ uv lock

# Синхронизировать окружение по lockfile
$ uv sync

# Сгенерировать requirements.txt из lockfile (для совместимости)
$ uv export --format requirements-txt > requirements.txt

Lockfile содержит хеши всех пакетов и маркеры платформ — одинаковый результат на Linux, macOS и Windows.

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

# Создать виртуальное окружение (мгновенно)
$ uv venv
# Creating virtual environment at: .venv (0.01s)

# Установить пакеты
$ uv pip install fastapi uvicorn sqlalchemy

# Установить из requirements.txt
$ uv pip install -r requirements.txt

# Скомпилировать lock (аналог pip-compile)
$ uv pip compile requirements.in -o requirements.txt

# Синхронизировать окружение (удалит лишнее, доставит недостающее)
$ uv pip sync requirements.txt

# Установить конкретную версию Python
$ uv python install 3.12

# Запустить скрипт с автоматическим окружением
$ uv run python app.py

uv run — киллер-фича: создаёт venv, ставит зависимости из pyproject.toml и запускает команду. Один вызов вместо трёх.

Интеграция с CI/CD и Docker

uv идеально ложится в CI благодаря скорости и детерминированности:

# GitHub Actions
- name: Install uv
  uses: astral-sh/setup-uv@v4

- name: Install dependencies
  run: uv sync --frozen

- name: Run tests
  run: uv run pytest

Docker-образ с uv получается компактнее и собирается быстрее:

# Dockerfile
FROM python:3.12-slim

COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv

WORKDIR /app
COPY pyproject.toml uv.lock ./

# Установка без создания venv (system Python)
RUN uv sync --frozen --no-dev --system

COPY . .
CMD ["python", "-m", "uvicorn", "app:app", "--host", "0.0.0.0"]

Кэширование в CI: uv хранит глобальный кэш в ~/.cache/uv. Закэшируйте эту директорию — повторные сборки будут занимать секунды.

Ограничения: когда пока рано

  • Editable installs с legacy setup.py: uv поддерживает -e ., но пакеты без pyproject.toml и с чистым setup.py могут вести себя иначе.
  • Приватные репозитории: поддержка есть (--index-url, --extra-index-url, keyring), но настройка менее документирована, чем у pip.
  • Плагины pip: если вы используете pip-плагины (pip-audit через pip, pip-licenses) — они не работают с uv напрямую.
  • Poetry/PDM экосистема: если проект завязан на poetry groups, scripts, plugins — миграция потребует переписывания pyproject.toml.
  • Windows + conda: uv не заменяет conda для научных пакетов с бинарными зависимостями (CUDA, MKL).

Выводы: стоит ли переходить

Переходите на uv, если:

  1. Вам важна скорость CI — экономия 30-60 секунд на каждом пайплайне складывается в часы.
  2. Проект использует requirements.txt или pyproject.toml (PEP 621) — миграция нулевая.
  3. Нужен кросс-платформенный lockfile без poetry/pdm.
  4. Docker-сборки тормозят на pip install.

Подождите, если:

  1. Проект глубоко завязан на poetry plugins и groups.
  2. Используете conda для научных вычислений.
  3. Нужна стабильность enterprise-уровня (uv ещё молод, API может меняться).

В 2026 году uv — уже не эксперимент, а рабочий инструмент. Для новых проектов это выбор по умолчанию.

Комментарии 0

  • Будьте первым, кто оставит комментарий.

Войдите, чтобы оставить комментарий.