uv — молниеносный менеджер пакетов и виртуальных окружений: полный разбор

Кратко: uv — новый менеджер от создателей Ruff, написанный на Rust. Он заменяет pip, virtualenv, poetry и работает в 10–100 раз быстрее. Установка, окружение, зависимости — всё в одной утилите.
uv пакетный менеджер

Сегодня в этой статье мы разберём uv — молниеносный пакетный менеджер и инструмент управления виртуальными окружениями для Python.

Он активно развивается, совместим с существующей экосистемой, но при этом устанавливает зависимости в десятки раз быстрее, чем pip или poetry.

Вы узнаете:

  • как установить uv,
  • как создать проект и окружение,
  • как управлять зависимостями,
  • почему он так быстр,
  • и стоит ли переходить на него уже сегодня.

Что такое uv и почему он важен?

uv — это высокопроизводительный инструмент от команды Astral (создатели Ruff), написанный на Rust. Он заменяет сразу несколько утилит:

  • pip — установка пакетов
  • virtualenv / venv — создание окружений
  • poetry / pip-tools — управление зависимостями
  • pipx — запуск утилит
  • pyenv — управление версиями Python (частично)

📚 Официальная документация: https://docs.astral.sh/uv/

Главная цель uv — устранить главную боль Python-разработчиков: медленную работу с пакетами.

Установка uv

Рекомендуемый способ — нативный установщик

Для Linux/macOS:

curl -LsSf https://astral.sh/uv/install.sh | sh

Для Windows (PowerShell):

irm https://astral.sh/uv/install.ps1 | iex

💡 Почему не через pip?
Установка через pip даёт интерпретируемую обёртку, а не нативный бинарник. Скорость будет ниже. Настоящий uv — это скомпилированный Rust-бинарник, поэтому используйте официальный скрипт.

После установки перезапустите терминал и проверьте версию:

uv --version
# uv 0.4.12 (...)

Создание проекта и виртуального окружения

В отличие от классического подхода (python -m venv + pip install), uv делает всё за один шаг:

uv init my_project
cd my_project

Эта команда создаёт:

  • pyproject.toml — современный стандарт описания проекта
  • .python-version — фиксация версии Python
  • .gitignore — с правильными исключениями
  • hello.py — пример скрипта

⚠️ Обратите внимание: окружение (.venv) создаётся не сразу, а при первом запуске uv run или uv add. Это экономит время и место.

Установка пакетов — основной рабочий процесс

Команда uv add — правильный способ

uv add requests pandas

Эта команда, устанавливает библиотеки requests pandas

Что происходит:

  1. uv скачивает пакеты параллельно
  2. Решает зависимости с помощью написанного на Rust решателя (в 100× быстрее Poetry)
  3. Обновляет pyproject.toml
  4. Создаёт или обновляет uv.lock — файл с фиксированными версиями (аналог poetry.lock)

Пример pyproject.toml после установки:

[project]
name = "my_project"
version = "0.1.0"
requires-python = ">=3.8"
dependencies = [
    "requests>=2.32.0",
    "pandas>=2.2.0",
]

💡 Почему >=?
uv по умолчанию использует гибкие ограничения, чтобы разрешить обновления без конфликтов. Если нужно точно зафиксировать версию, используйте uv add requests==2.32.0.

Совместимость с pip: команда uv pip install

Если у вас есть старый requirements.txt, вы можете использовать:

uv pip install -r requirements.txt

Но это не рекомендуется для новых проектов, потому что:

  • Не обновляется pyproject.toml
  • Не создаётся uv.lock
  • Работает медленнее, чем uv add

Этот режим существует только для обратной совместимости.

Управление зависимостями

Просмотр дерева зависимостей

uv tree

Вывод:

my_project v0.1.0
├── requests v2.32.0
│   ├── charset-normalizer v3.3.2
│   ├── idna v3.6
│   ├── urllib3 v2.2.1
│   └── certifi v2024.2.2
└── pandas v2.2.1
    ├── numpy v1.26.4
    └── python-dateutil v2.9.0

Это помогает находить дублирующиеся или устаревшие зависимости.

Обновление и удаление

uv add requests --upgrade       # обновить один пакет
uv sync --upgrade               # обновить все
uv remove requests              # удалить

Команда uv sync синхронизирует окружение с pyproject.toml — полезно при клонировании проекта.

Почему uv так быстр? Технические детали

  1. Rust вместо Python — низкоуровневая оптимизация, нулевое накладное время
  2. Параллельная загрузка — все пакеты качаются одновременно
  3. Глобальное кэширование — каждый пакет и версия хранятся один раз на диске
  4. Оптимизированный решатель зависимостей — не использует медленные алгоритмы Python

📊 Реальный тест на 50 пакетах:

  • pip install -r req.txt: 3 мин 42 сек
  • poetry install: 1 мин 15 сек
  • uv sync: 6–9 секунд

Запуск скриптов и одноразовые утилиты

uv run — автоматическая активация окружения

uv run my_script.py

uv не требует source .venv/bin/activate. Он активирует окружение «на лету» и деактивирует после завершения.

uvx — аналог npx для Python

uvx black my_code.py      # установит и запустит black
uvx httpx https://api.example.com

Это создаёт временное окружение, устанавливает туда пакет и запускает его. Идеально для CLI-инструментов.

💡 Чтобы не засорять кэш: uv cache clean

Поэтому если вы будете писать скрипты для автоматизации — например, как резервное копирование файлов или отправку уведомлений в Telegram — вы можете мгновенно создать для них изолированное окружение:

uv init backup_script
cd backup_script
uv add requests python-dotenv

Это гарантирует, что зависимости одного скрипта не повлияют на другой.

Заключение

uv пакетный менеджер — это не «ещё один инструмент», а новый стандарт для работы с Python-проектами. Он:

  • Совместим с pyproject.toml
  • Устанавливает зависимости в десятки раз быстрее
  • Упрощает управление окружениями
  • Поддерживает современные практики (lock-файлы, dev-зависимости)

Если вы работаете с Python регулярно — попробуйте uv уже сегодня. Вы удивитесь, насколько быстрее стало всё работать.

🧠 Если вам полезны советы по Python, посмотрите также:
чистый код python — как писать понятные и поддерживаемые скрипты
редкие трюки python — малоизвестные, но мощные фичи языка
💬 Остались вопросы? Пишите в комментариях — с радостью уточню, дополню или помогу с вашим кодом.
📢 Подписывайтесь на Telegram-канал PythonAuto, чтобы не пропустить новые гайды по автоматизации, парсингу и Python.
👉 Ваш интерес — лучшая мотивация для новых статей!

Оставьте комментарий