uv — инструмент нового поколения для управления Python-зависимостями. Написан на Rust компанией Astral, в 10–100 раз быстрее pip, и заменяет сразу несколько инструментов: pip, venv, pyenv, pip-tools.
Зачем ещё один менеджер
Стандартный pip работает, но медленно и неточно. Установка Django занимает 30–60 секунд — uv делает это за 1–2 секунды. Но скорость — не главное.
Главное — воспроизводимость. pip install без lockfile может поставить разные версии на разных машинах. uv генерирует uv.lock — детерминированный файл с точными версиями всех пакетов включая транзитивные зависимости. На любой машине uv sync даст одинаковое окружение.
Установка
На Mac/Linux:
curl -LsSf https://astral.sh/uv/install.sh | sh
На Windows (PowerShell):
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
После установки перезапусти терминал:
uv --version # uv 0.5.x
Создание проекта
uv init my-project # создаёт папку с pyproject.toml и .venv
cd my-project
Что создаётся автоматически:
- pyproject.toml — описание проекта и зависимости
- .python-version — закреплённая версия Python
- hello.py — стартовый файл
- .venv/ — виртуальное окружение
Добавление зависимостей
uv add anthropic # добавить зависимость
uv add httpx rich environs # несколько сразу
uv add pytest --dev # dev-зависимость (не в prod)
uv remove requests # удалить
Зависимости автоматически записываются в pyproject.toml и фиксируются в uv.lock.
Запуск кода
uv run python main.py # запустить в виртуальном окружении
uv run pytest # запустить тесты
uv run ruff check . # запустить любой инструмент
uv run автоматически активирует нужное окружение — не нужно делать source .venv/bin/activate.
Lockfile и воспроизводимость
uv.lock — коммить в Git. Это гарантия что у всех членов команды и в CI одинаковые версии.
uv sync # установить точно по lockfile
uv sync --dev # включая dev-зависимости
Сравнение с pip + venv
| Задача | pip + venv | uv |
|---|---|---|
| Создать окружение | python -m venv .venv + активировать |
uv init |
| Добавить пакет | pip install X + записать в requirements.txt |
uv add X |
| Воспроизвести окружение | pip install -r requirements.txt (неточно) |
uv sync (точно по lockfile) |
| Скорость | медленно | в 10–100 раз быстрее |
| Версия Python | отдельно через pyenv | встроено |
pyproject.toml
Стандартный формат описания проекта (PEP 517/518). uv создаёт и обновляет его автоматически:
[project]
name = "my-project"
version = "0.1.0"
requires-python = ">=3.12"
dependencies = [
"anthropic>=0.40.0",
"rich>=13.0.0",
"environs>=11.0.0",
]
[tool.uv]
dev-dependencies = [
"pytest>=8.0.0",
"ruff>=0.8.0",
]
Совет: .python-version
Файл .python-version фиксирует версию Python для проекта. uv читает его и при необходимости сам скачивает нужную версию — не нужен pyenv.
3.12
💬 Комментарии (0)
Комментариев пока нет
Станьте первым, кто поделится мнением об этой статье!