UV. Самый быстрый пакетный менеджер Python
Всем привет! Недавно познакомился с замечательным пакетным менеджером UV. Хочу и Вас с ним познакомить!
Hidden text
На хабре статей не нашел. В русском сегменте youtube так же ничего нет. Если это не так — сорян)
Что такое UV?
UV (сайт) — это чрезвычайно быстрый пакетный менеджер Python, написанный на Rust. Разработан как замена для pip и pip-tools. Помимо этого он может собой заменить venv и pyenv. Но обо всем по порядку.
Бенчмарки от разработчиков
Бенчмарки от разработчиков — это хорошо, но я решил сам проверить насколько он хорош. Замеры весьма условные и синтетические. Сделаны больше для сопоставления нежели для реального сравнения. Время в секундах.
Команда | pip | uv | |
Создание окружения | real | 3,468 | 0,028 |
user | 3,468 | 0,000 | |
Установка flask | real | 19,166 | 0,024 |
user | 2,465 | 0,019 | |
Установка requests (для сравнения) | real | 37,865 | 1,055 |
user | 1,820 | 0,096 |
Результаты весьма достойные!
Установка UV
On macOS and Linux.
curl -LsSf https://astral.sh/uv/install.sh | sh
On Windows.
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
For a specific version.
curl -LsSf https://astral.sh/uv/0.2.23/install.sh | sh
powershell -c "irm https://astral.sh/uv/0.2.23/install.ps1 | iex"
With pip.
pip install uv
With pipx.
pipx install uv
With Homebrew.
brew install uv
Создание окружения
uv venv
Активация окружения
On macOS and Linux.
source .venv/bin/activate
On Windows.
.venv\Scripts\activate
Установка библиотек
uv pip install flask # Ставим flask
uv pip install -r requirements.txt # Установка из requirements.txt
Фиксация зависимостей
uv pip freeze | uv pip compile - -o requirements.txt
Что еще умеет UV?
Первое — это работа с виртуальным окружением (как создать окружение показал выше).
Второе, но не по значению — это управления версиями Python. Есть проект pyenv и думаю тут UV сможет его потеснить. Если кратко, то pyenv — это система управления версиями Python на вашем компьютере. Скажем, стоит у Вас Python 3.10, а Вы хотите поставить 3.8. У Вас два варианта — или скачать с официального сайта и скомпилировать, или поставить pyenv и уже с его помощью поставить интерпретатор нужной версии и создавать от него окружения.
А тут все в одном инструменте!
1) Ставим нужную версию Python
uv python install 3.12
2) Проверяем что все установилось
uv python list
3) Создаем окружение с новой версией
uv venv -p /home/timur/.local/share/uv/python/cpython-3.12.3-linux-x86_64-gnu/bin/python3 venv2
source venv2/bin/activate
Вуаля! Теперь у нас новый Python и новое окружение к нему.
Помимо этого можно ставить утилиты через uv tool, но я, если честно, не особо этим пользовался.
Так же есть возможность управлять кэшем пакетов через uv cache.
Как итог
Плюсы:
Самый огромный плюс — это скорость.
Синтаксис. Если умеете работать с pip, то большинство команд будут вам знакомы.
Работа с виртуальным окружением — пушка!
Работа с версиями Python — просто бомба!
Минусы тоже есть:
Платформозависимые lockfile.
Нет фиксации контрольной суммы зависимой библиотеки как в том же poetry.
Пока не получится посмотреть дерево зависимостей как в poetry.
UV — это интересный пакетный менеджер. Он очень быстрый и понятный в силу своей похожести на pip. Управление виртуальным окружением и управление версиями Python делают UV инструментом 3 в 1, что только добавляет ему привлекательности. Думаю, он уже сейчас может конкурировать с poetry и другими крупными пакетными менеджерами.