
Сегодня в этой статье мы разберём 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
Что происходит:
- uv скачивает пакеты параллельно
- Решает зависимости с помощью написанного на Rust решателя (в 100× быстрее Poetry)
- Обновляет
pyproject.toml - Создаёт или обновляет
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 так быстр? Технические детали
- Rust вместо Python — низкоуровневая оптимизация, нулевое накладное время
- Параллельная загрузка — все пакеты качаются одновременно
- Глобальное кэширование — каждый пакет и версия хранятся один раз на диске
- Оптимизированный решатель зависимостей — не использует медленные алгоритмы 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 — малоизвестные, но мощные фичи языка
📢 Подписывайтесь на Telegram-канал PythonAuto, чтобы не пропустить новые гайды по автоматизации, парсингу и Python.
👉 Ваш интерес — лучшая мотивация для новых статей!