uv: Менеджер пакетов Python, который заменяет pip, pip-tools и venv (Руководство 2026 г.)
Если вы в этом году работали над проектом Python, вы, вероятно, видели, как uv появляется в файле README или CI. Это написанный на Rust менеджер пакетов и инструмент virtualenv от Astral (той же команды, которая создала ruff) — и он в 10-100 раз быстрее, чем классическая комбинация pip/pip-tools/venv.
В этом руководстве рассказывается: что на самом деле заменяет uv, пять команд, которые охватывают 95% того, что вы делаете ежедневно, и два случая, когда вам следует придерживаться классических инструментов.
Что заменяет уф
| Классический инструмент | ультрафиолетовый эквивалент | Ускорение |
|---|---|---|
| python -m venv .venv | ув венв | ~5x |
| pip install pkg | uv pip install pkg | ~10-50x |
| pip install -r требования.txt | uv pip install -r требования.txt | 20-100x в холодном кеше |
| pip-compile (pip-tools) | uv pip компиляция | ~50x |
| python -m venv + source active для каждого проекта | uv run <cmd> | Полностью пропускает активацию |
Разница в скорости реальная. Установка умеренного проекта Django (Django + DRF + celery + redis + boto3 + ~40 транзитивных депов) на холодный кеш занимает ~45 секунд с помощью pip и ~2 секунды с uv. В теплом кеше uv по существу работает мгновенно, потому что он использует глобальный жестко связанный кеш вместо копирования файлов в каждый венв.
Пять команд, которые вы действительно будете использовать
###1. Устанавливаем сам ув
BASH# macOS + Linux — one line, no sudo, no Python needed curl -LsSf https://astral.sh/uv/install.sh | sh # Windows PowerShell powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex" # Or via brew / apt / your package manager (updated frequently) brew install uv
uv — это отдельный самодостаточный двоичный файл — без начальной загрузки Python и собственных зависимостей.
2. Создайте виртуальную среду
BASHcd my-project uv venv # creates .venv/ using the current Python uv venv --python 3.13 # or pin a version — uv will download it if missing
В отличие от python -m venv, uv может получить запрошенную вами версию Python. Больше никаких трехшаговых танцев «pyenv install, потом venv, then active».
3. Установите пакеты
BASHuv pip install fastapi httpx # into the current venv uv pip install -r requirements.txt # bulk install uv pip install -e . # editable install of current project
Синтаксис намеренно идентичен pip — замените pip на uv pip и всё заработает. Стоимость миграции: пять нажатий клавиш.
4. Заморозить/скомпилировать требования
BASH# From an installed venv → requirements.txt (like `pip freeze`) uv pip freeze > requirements.txt # From a loose requirements.in → fully pinned requirements.txt (like pip-compile) uv pip compile requirements.in -o requirements.txt
Шаг компиляции является детерминированным — тот же ввод, тот же вывод, побайтно. Идеально подходит для воспроизводимой CI.
5. Выполнить команду без активации венва
BASHuv run pytest # runs pytest from the current venv uv run python manage.py migrate # any command, any script uv run --with ipython python # temporarily add ipython for this session
Это убийственная особенность. Больше никаких source .venv/bin/activate перед каждой командой. Отлично работает с CI, отлично работает с Makefiles, отлично работает со сценариями оболочки.
Миграция существующего проекта (2 минуты)
Предполагая, что у вас есть requirements.txt:
BASH# 1. Nuke the old venv rm -rf .venv # 2. Create the uv venv uv venv # 3. Install uv pip install -r requirements.txt # 4. Verify uv run python -c "import fastapi; print(fastapi.__version__)"
Четыре команды готовы. Ваш requirements.txt не нужно менять. Ваш pyproject.toml не нужно менять. Ваш CI практически не нужно менять — поменяйте местами этап установки, и все готово.
Собственный путь pyproject.toml (проекты uv-first)
Для проектов, начинающихся с нуля, используйте собственный рабочий процесс uv — вообще без требований.txt:
BASHuv init my-project # generates pyproject.toml + .python-version + .gitignore cd my-project uv add fastapi # adds fastapi to pyproject.toml [dependencies] AND installs uv add --dev pytest # adds to dev-dependencies uv sync # installs exactly what pyproject.toml says (uses uv.lock) uv lock --upgrade # bumps every dependency to its latest compatible version
Это та же форма, что и «cargo» для Rust или «npm» для Node — один файл конфигурации, один файл блокировки, детерминированная установка. Если вы начинаете все сначала в 2026 году, это путь.
Когда следует использовать pip/venv
Два случая:
1. Устаревшие системы CI, которые не могут установить uv. Если вы застряли с агентом Jenkins 2019 года без доступа к оболочке, трудности с установкой uv могут перевесить выигрыш в скорости. Каждая современная CI-система (GitHub Actions, GitLab CI, CircleCI, BuildKite) имеет однострочный установщик uv.
2. Среды с Airgapped и заблокированным зеркалом `pip`. uv по умолчанию использует PyPI, но поддерживает --index-url — обычно это работает, но некоторые корпоративные зеркала имеют тонкое поведение (заголовки аутентификации, JSON API и Simple API), которые uv обрабатывает по-разному. Протестируйте, прежде чем совершать.
Вот и все. Для всех остальных случаев в 2026 году — одиночная разработка, командные проекты, открытый исходный код, CI, Docker — uv работает быстрее, надежнее и требует меньше умственных затрат, чем классический стек.
30-секундная замена CI
До (Действия GitHub):
YAML- uses: actions/setup-python@v5 with: python-version: '3.13' - run: pip install -r requirements.txt - run: pytest
После:
YAML- uses: astral-sh/setup-uv@v3 - run: uv sync - run: uv run pytest
На этапе установки время выполнения CI снижается с ~2 минут до ~15 секунд. Если ваша тестовая матрица работает в 5 раз на PR, это реальная совокупная экономия.
uv — это редкий инструмент, который одновременно быстрее и проще, чем тот, который он заменяет. Если вы зарабатываете на жизнь написанием Python в 2026 году, потратьте 10 минут на переключение одного проекта. Эта привычка сохранится в каждом новом проекте, к которому вы прикасаетесь.
Следующий шаг: Python DevOps track охватывает uv, ruff, Docker и современный стек развертывания Python — 104 интерактивных урока.