uv: один бинарник вместо pip, venv и pyenv
Astral переписала инструменты Python на Rust. uv ставит пакеты, создаёт окружения, тянет нужный интерпретатор и запускает скрипты одной командой.
Что это
uv — менеджер пакетов и проектов для Python от Astral, той же команды, что сделала линтер ruff. Написан на Rust, распространяется одним бинарником и закрывает сразу несколько ролей: pip, pip-tools, virtualenv, pyenv и частично pipx.
Ключевая идея проста: не нужно объяснять новичку, чем venv отличается от virtualenv, зачем requirements.txt и requirements.in, и почему pip иногда ставит не то, что в lock-файле. Один инструмент, одна ментальная модель.
Как это выглядит в работе
Новый проект начинается с трёх команд:
uv init myapp
cd myapp
uv add httpx
После этого в каталоге лежат pyproject.toml, uv.lock и .venv. Окружение создаётся автоматически, интерпретатор нужной версии скачивается, если его нет на машине. Запуск — через uv run:
uv run python main.py
uv run pytest
Установка зависимостей на CI — uv sync --frozen. Если lock-файл разошёлся с pyproject.toml, команда упадёт вместо того, чтобы тихо подтянуть свежие версии.
Скрипты с зависимостями в шапке
Отдельно удобная вещь — inline-метаданные по PEP 723. Одиночный скрипт может объявить свои зависимости прямо в комментарии:
# /// script
# dependencies = ["requests", "rich"]
# ///
import requests
from rich import print
uv run script.py сам соберёт временное окружение и запустит файл. Для утилит «на один раз» это снимает всю боль с pip install в системный Python.
Скорость
Установка пакетов у uv заметно быстрее pip: резолвер написан на Rust, файлы кешируются глобально и линкуются в окружение вместо копирования. На больших проектах разница ощущается как «секунды вместо минут», особенно на повторных установках.
Что стоит знать
- uv совместим с
requirements.txtи умеет команды в стилеuv pip install, так что переход можно делать постепенно. - Lock-файл
uv.lockкроссплатформенный: один файл описывает зависимости для Linux, macOS и Windows. uv tool installзаменяет pipx для установки CLI-утилит в изолированные окружения.- Проект открытый, лицензия MIT или Apache 2.0 на выбор.
Вывод
uv стал тем инструментом, о котором в Python-мире говорили десять лет: быстрый, целостный и не требующий знать историю экосистемы. Если у вас ещё живёт связка pyenv + pip-tools + virtualenvwrapper, это хороший момент её заменить.
Войти, чтобы оценить материал
Комментарии
Войти, чтобы оставить комментарий