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

Материал из llmdocs — справочник разработчика
Портал: Python
uv (менеджер пакетов)
Типменеджер пакетов и проектов
РазработчикAstral (Чарли Марш)
Первый выпускфевраль 2024
Написан наRust
Заменяетpip, pip-tools, virtualenv, pipx, pyenv, частично Poetry
Файл блокировкиuv.lock
ЛицензияMIT / Apache 2.0
Сайтdocs.astral.sh/uv

uv — менеджер пакетов и проектов для Python, написанный на Rust компанией Astral. Он объединяет в одном исполняемом файле функции нескольких инструментов: установщика pip, создания виртуальных окружений, фиксации зависимостей, установки консольных утилит и управления версиями самого Python. Главная отличительная черта — скорость: по замерам разработчиков, установка зависимостей выполняется в 10–100 раз быстрее, чем у pip.[2]

История

Компания Astral, основанная Чарли Маршем, стала известна линтером Ruff, тоже написанным на 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;
  • чтение метаданных пакета без скачивания всего архива, где это позволяет индекс.

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

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, а точные версии всего дерева — в 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]

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

# /// 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 по умолчанию требует виртуальное окружение.

См. также

Источники

  1. uv documentation
  2. uv: Python packaging in Rust — Astral blog (2024)
  3. uv: Unified Python packaging — Astral blog (2024)
  4. PEP 723 — Inline script metadata
  5. astral-sh/uv — GitHub