# uv (менеджер пакетов)

> Быстрый менеджер пакетов и проектов Python на Rust от компании Astral — замена pip, virtualenv, pip-tools, pipx и pyenv.

Источник: https://llmdocs.ru/wiki/uv/ · обновлено 2026-11-09 · лицензия CC BY-SA 4.0

- **Тип**: менеджер пакетов и проектов
- **Разработчик**: Astral (Чарли Марш)
- **Первый выпуск**: февраль 2024
- **Написан на**: Rust
- **Заменяет**: pip, pip-tools, virtualenv, pipx, pyenv, частично Poetry
- **Файл блокировки**: `uv.lock`
- **Лицензия**: MIT / Apache 2.0
- **Сайт**: [docs.astral.sh/uv](https://docs.astral.sh/uv/)
**uv** — менеджер пакетов и проектов для [Python](https://llmdocs.ru/wiki/python.md), написанный на [Rust](https://llmdocs.ru/wiki/rust.md) компанией Astral. Он объединяет в одном исполняемом файле функции нескольких инструментов: установщика [pip](https://llmdocs.ru/wiki/pip-pypi.md), создания [виртуальных окружений](https://llmdocs.ru/wiki/venv.md), фиксации зависимостей, установки консольных утилит и управления версиями самого Python. Главная отличительная черта — скорость: по замерам разработчиков, установка зависимостей выполняется в 10–100 раз быстрее, чем у pip.[2]

## История

Компания Astral, основанная Чарли Маршем, стала известна линтером [Ruff](https://llmdocs.ru/wiki/ruff.md), тоже написанным на Rust. В феврале 2024 года она выпустила uv как быструю замену `pip` и `pip-tools` с совместимым интерфейсом `uv pip`.[2] В августе того же года uv превратился в полноценный менеджер проектов: появились команды `uv init`, `uv add`, `uv run`, кроссплатформенный файл блокировки `uv.lock`, установка версий Python и запуск утилит через `uvx`.[3] Инструмент быстро набрал популярность и стал одним из самых используемых средств упаковки в экосистеме Python.

## Почему быстрый

- реализация на Rust и параллельная загрузка и распаковка пакетов;
- глобальный кеш, из которого файлы в окружения ставятся жёсткими ссылками или копированием с поддержкой copy-on-write — повторная установка почти мгновенна;
- собственный резолвер зависимостей на основе алгоритма PubGrub;
- чтение метаданных пакета без скачивания всего архива, где это позволяет индекс.

## Работа с проектом

```bash
uv init myapp && cd myapp      # создать проект с pyproject.toml
uv add httpx "fastapi>=0.110"  # добавить зависимости, обновить uv.lock
uv add --dev pytest ruff       # зависимости для разработки
uv run python main.py          # запустить в окружении проекта
uv run pytest                  # то же для любой команды
uv sync                        # привести .venv в точное соответствие с uv.lock
uv lock --upgrade              # обновить версии в файле блокировки
```

Зависимости описываются в стандартном [pyproject.toml](https://llmdocs.ru/wiki/pyproject-toml.md), а точные версии всего дерева — в `uv.lock`, который коммитят в репозиторий. Окружение `.venv` создаётся и синхронизируется автоматически при `uv run`, поэтому активировать его вручную не нужно.

## Другие режимы

| Команда | Что заменяет |
|---|---|
| `uv pip install`, `uv pip compile` | pip и pip-tools, тот же формат `requirements.txt` |
| `uv venv` | `python -m venv`, virtualenv |
| `uv python install 3.13` | pyenv: скачивает готовые сборки Python |
| `uvx ruff check .` / `uv tool install` | pipx: запуск и установка утилит в изолированных окружениях |
| `uv run script.py` с метаданными в начале файла | запуск одиночных скриптов с зависимостями (PEP 723)[4] |

Пример одиночного скрипта с зависимостями прямо в файле:

```python
# /// script
# requires-python = ">=3.12"
# dependencies = ["httpx"]
# ///
import httpx
print(httpx.get("https://pypi.org/simple/").status_code)
```

Команда `uv run script.py` сама создаст временное окружение, установит `httpx` и выполнит скрипт.

## Сравнение

| | pip + venv | Poetry | uv |
|---|---|---|---|
| Скорость установки | базовая | сопоставима с pip | в разы выше |
| Файл блокировки | нет (нужен pip-tools) | `poetry.lock` | `uv.lock` |
| Управление версиями Python | нет | нет | есть |
| Стандартный `pyproject.toml` | да | да (с 2.0) | да |
| Зависимость от установленного Python | нужен | нужен | не нужен, один бинарный файл |

## Ограничения и критика

uv развивает коммерческая компания, что вызывает у части сообщества вопросы о долгосрочной независимости инструмента; код при этом открыт под лицензиями MIT и Apache 2.0.[5] Поскольку uv заменяет сразу много инструментов, в старых проектах переход может потребовать переписать скрипты сборки и CI. Некоторые возможности pip поддерживаются не полностью, а поведение по умолчанию местами отличается — например, `uv pip install` по умолчанию требует виртуальное окружение.

## См. также

- [pip и PyPI](https://llmdocs.ru/wiki/pip-pypi.md)
- [Виртуальные окружения (venv)](https://llmdocs.ru/wiki/venv.md)
- [pyproject.toml](https://llmdocs.ru/wiki/pyproject-toml.md)
- [Ruff](https://llmdocs.ru/wiki/ruff.md)

## Источники

1. [uv documentation](https://docs.astral.sh/uv/)
2. [uv: Python packaging in Rust — Astral blog (2024)](https://astral.sh/blog/uv)
3. [uv: Unified Python packaging — Astral blog (2024)](https://astral.sh/blog/uv-unified-python-packaging)
4. [PEP 723 — Inline script metadata](https://peps.python.org/pep-0723/)
5. [astral-sh/uv — GitHub](https://github.com/astral-sh/uv)
