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

2fcc59b025b67f8bc96aaeec1d6eab80.png

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

5bd29970ef9d11d47b16d56e984b6d32.png

Вуаля! Теперь у нас новый Python и новое окружение к нему.

Помимо этого можно ставить утилиты через uv tool, но я, если честно, не особо этим пользовался.

Так же есть возможность управлять кэшем пакетов через uv cache.

Как итог

Плюсы:

  • Самый огромный плюс — это скорость. 

  • Синтаксис. Если умеете работать с pip, то большинство команд будут вам знакомы.

  • Работа с виртуальным окружением — пушка!

  • Работа с версиями Python — просто бомба!

Минусы тоже есть:

  • Платформозависимые lockfile.

  • Нет фиксации контрольной суммы зависимой библиотеки как в том же poetry.

  • Пока не получится посмотреть дерево зависимостей как в poetry.

UV — это интересный пакетный менеджер. Он очень быстрый и понятный в силу своей похожести на pip. Управление виртуальным окружением и управление версиями Python делают UV инструментом 3 в 1, что только добавляет ему привлекательности. Думаю, он уже сейчас может конкурировать с poetry и другими крупными пакетными менеджерами.

© Habrahabr.ru