меню

Прощай, pip: как uv ускоряет Python-проекты в десятки раз

Я долго считал, что медленный pip install - это неизбежная плата за работу с Python. Мол, так устроена экосистема, и с этим ничего не поделать. Я ошибался.

Каждый день я работаю с Django API, микросервисами и CI/CD-пайплайнами, и управление зависимостями годами оставалось самой болезненной частью процесса. Медленные сборки, сломанные виртуальные окружения, конфликты пакетов, дублирование зависимостей в каждом проекте - всё это съедало время и порождало баги, которые потом приходилось ловить в продакшене.

А потом я попробовал uv. И он изменил мой подход к работе целиком.

Что такое uv

uv - это менеджер пакетов для Python, написанный на Rust. Он заменяет сразу несколько инструментов: pip, venv и частично pyenv. Создан он компанией Astral - той же командой, что стоит за линтером Ruff.

Что он даёт на практике:

  • скорость - установка и разрешение зависимостей на порядок быстрее
  • надёжность - предсказуемые сборки без «поехавших» окружений
  • простоту - один инструмент вместо трёх-четырёх

Почему pip больше не хватает

pip - это установщик пакетов, а не менеджер проектов. У него есть фундаментальные ограничения:

  • медленная установка
  • неэффективное разрешение зависимостей
  • дублирование пакетов в каждом проекте отдельно
  • хрупкие окружения, которые легко сломать

Результат - потерянное время и скрытые баги, которые всплывают в самый неподходящий момент.

Установка: Windows, macOS, Linux

Главное преимущество uv в том, что он умеет управлять не только пакетами, но и самим интерпретатором Python.

Windows


powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

macOS и Linux


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

Альтернативные способы


winget install --id=astral-sh.uv -e


brew install uv

Проверка через pip


pip install uv

Этот способ рабочий, но ограниченный: он зависит от системного Python и не даёт всех преимуществ нативной установки.

Рабочий процесс: от инициализации до запуска

Инициализация проекта


uv init crypto-tracker
cd crypto-tracker

Установка зависимостей


uv add requests rich

Именно на этом шаге чувствуется разница - установка происходит мгновенно.

Пример кода

	
import requests
from rich.console import Console

console = Console()

def fetch_price():
    data = requests.get(
        "https://api.coingecko.com/api/v3/simple/price?ids=bitcoin&vs_currencies=usd"
    ).json()
    price = data["bitcoin"]["usd"]
    console.print(f"[bold green]BTC:[/bold green] ${price:,}")

if __name__ == "__main__":
    fetch_price()

Запуск


uv run main.py

Никакой активации окружения, никакой дополнительной настройки. Просто запуск.

Выживание в Windows и в корпоративной сети

PowerShell блокирует выполнение скриптов


Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

Активация venv в Windows


.\.venv\Scripts\activate

Проблемы с SSL в корпоративной сети


$env:UV_NATIVE_TLS="1"


export UV_NATIVE_TLS=1

Настройка прокси


export HTTP_PROXY="http://proxy:8080"
export HTTPS_PROXY="http://proxy:8080"

Winget не распознаётся

Обновите App Installer через Microsoft Store.

Почему uv такой быстрый

Глобальный кэш

Пакеты скачиваются один раз и переиспользуются между всеми проектами. Никакого дублирования.

Движок на Rust

Параллельные загрузки, быстрое распаковывание, нативная производительность без накладных расходов Python.

Алгоритм PubGrub

Быстрое разрешение зависимостей, меньше конфликтов, предсказуемые сборки.

Архитектура проекта после uv init


crypto-tracker/
├── pyproject.toml
├── uv.lock
├── .venv/
└── main.py

pyproject.toml


[project]
name = "crypto-tracker"
version = "0.1.0"
dependencies = ["requests", "rich"]

Заменяет requirements.txt и соответствует официальному стандарту Python.

uv.lock

Фиксирует точные версии всех зависимостей. Обеспечивает воспроизводимость сборок.

.venv

Использует жёсткие ссылки на глобальный кэш. Быстро и легко.

Глобальный кэш


~/.cache/uv/

Жизненный цикл проекта


pyproject.toml ? uv.lock ? .venv ? глобальный кэш

Сравнение: до и после

pip uv
медленно сверхбыстро
хрупко надёжно
дублирование глобальный кэш
вручную автоматизировано

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

Команда Назначение
uv add установка пакетов
uv run выполнение кода
uv sync синхронизация окружения
uv tree отладка зависимостей
uv python install установка Python

Бенчмарк: pip против uv

Одинаковый набор зависимостей:


requests, numpy, pandas, fastapi

pip


pip install requests numpy pandas fastapi

Время: 15–45 секунд.

uv


uv add requests numpy pandas fastapi

Время: 1–3 секунды.

Результат

Инструмент Время
pip 15–45 с
uv 1–3 с

Ускорение в 10–20 раз.

Пример вывода в терминале


$ uv init crypto-tracker
Initialized project 'crypto-tracker'

$ uv add requests rich
Resolved 12 packages in 120ms
Installed in 340ms

$ uv run main.py
BTC: $67,245

Влияние на CI/CD

До


pip install -r requirements.txt

Время: 60–120 секунд.

После


uv sync

Время: 5–10 секунд.

Что это даёт в реальной работе

После перехода на uv:

  • CI-пайплайны ускоряются в разы
  • становится меньше багов, связанных с окружением
  • упрощается онбординг новых разработчиков
  • улучшается общий опыт работы с проектом

Заключение

uv - это не просто очередной инструмент. Это сдвиг в том, как Python-проекты собираются и управляются.

Оставаться на pip сегодня - значит сознательно отставать. Переход на uv - это движение быстрее, чище и разумнее.

Кратко о главном

  • заменяет pip и venv
  • написан на Rust, поэтому сверхбыстрый
  • глобальный кэш устраняет дублирование
  • встроенное управление версиями Python
  • заметно улучшает опыт разработчика

Попробуйте прямо сейчас:


uv init

Финальная мысль

Когда я впервые увидел, как uv устанавливает проект менее чем за две секунды, я решил, что что-то сломалось.

Помощь сайту
ЮMoney:
4100 1180 7209 833
Карта Сбербанк:
2202 2080 6183 7127

Возможно, вам будет интересно

Прощай, pip: как uv ускоряет Python-проекты в десятки раз

uv - это менеджер пакетов для Python, написанный на Rust. Он заменяет сразу несколько инструментов: pip, venv и частично pyenv. Создан он компанией Astral - той же командой, что стоит за линтером Ruff.