Лучший опыт

Забудьте про pip  —  используйте uv.

Во время скроллинга X (ранее Twitter) наткнулся на следующий твит: Кто такой Чарли Марш? Чарли Марш (Charlie Marsh) является создателем Astral  —  компании, которая меняет подход к работе на Python, предлагая усовершенствованный Python-инструментарий. Astral #1 Astral создает инструменты, позволяющие разработчикам быстрее выпускать отличное программное обеспечение. Astral #2 Ruff Astral выпустила линтер Ruff, который позволяет увеличить скорость в 10–100 раз по сра?
Забудьте про pip  —  используйте uv...

Во время скроллинга X (ранее Twitter) наткнулся на следующий твит:

Кто такой Чарли Марш?

Чарли Марш (Charlie Marsh) является создателем Astral  —  компании, которая меняет подход к работе на Python, предлагая усовершенствованный Python-инструментарий.

Astral #1

Astral создает инструменты, позволяющие разработчикам быстрее выпускать отличное программное обеспечение.

Astral #2

Ruff

Astral выпустила линтер Ruff, который позволяет увеличить скорость в 10–100 раз по сравнению с существующими линтерами, такими как Flake8, и форматировщиками, такими как Black.

Я использую Ruff при работе над всеми Python-проектами и считаю его незаменимым инструментом.

Теперь вернемся к uv.


Что такое uv?

uv  —  это очень быстрый установщик и разрешитель Python-пакетов, написанный на Rust как высокоскоростная альтернатива pip, pip-tools и virtualenv. Он в 10–100 раз быстрее, чем pip и pip-tools: с горячим кэшем установка uv происходит практически мгновенно.

Вот основные характеристики uv.

  • Экономия дискового пространства: использует глобальный кэш для предотвращения дублирования зависимостей.
  • Совместимость со всеми ОС: поддерживает macOS, Linux и Windows.
  • Простота установки: вам не нужно устанавливать Python или Rust —  можно использовать curl, pip или brew.
  • Расширенные возможности: поддерживает переопределение версий зависимостей и альтернативные стратегии разрешения.
  • Оптимизированные сообщения об ошибках: лучшие в своем классе сообщения об ошибках с разрешителем, отслеживающим конфликты.
  • Продвинутые функции pip: редактируемые установки, git-зависимости, локальные зависимости, комплекты поставки файлов исходного кода.

Почему uv такой быстрый?

Основное назначение uv  —  изменить управление Python-пакетами благодаря повышению скорости и надежности. Для этого в нем используются:

  • Rust: язык, известный своей скоростью и безопасностью.
  • Разрешительный механизм: “умный” способ выяснить, какие версии пакетов могут работать вместе.
  • Глобальный кэш модулей: запоминает файлы, которые уже “видел”, чтобы не скачивать заново и не перестраивать зависимости.
  • Механизм Copy-on-Write и жесткие ссылки: это помогает минимизировать использование дискового пространства.

Poetry следующего поколения?

Если вы достаточно давно работаете в экосистеме Python, то знаете, как мучительно настраивать среду Python или создавать пакет.

Python-среда по версии xkcd

Команда uv планирует создать “Cargo for Python”  —  единый менеджер пакетов и проектов Python, который будет чрезвычайно быстрым, надежным и простым в использовании.

Представьте: единая бинарная система, которая запускает Python-установку и предоставляет все необходимое для продуктивной работы с Python, включая не только pip, pip-tools и virtualenv, но и pipx, tox, poetry, pyenv, ruff и многое другое.

Использование инструментов Python не внушает доверия: требуется значительный объем работы для поддержки нового или существующего проекта, и команды не до конца понимают, как это сделать. Напротив, работая в экосистеме Rust, вы доверяете инструментам и уверены в успехе. Инструментарий Astral призван превратить малонадежный опыт работы на Python в высоконадежный.

С нетерпением жду, когда uv значительно улучшит опыт разработки на Python!

Бенчмарки

Обратимся к некоторым показателям из бенчмарков Astral.

Холодная установка (в 8–10 раз быстрее)

Это эквивалентно запуску uv pip sync на новом компьютере.

uv в 8–10 раз быстрее, чем pip и pip-tools без кэширования.

Источник

Горячая установка (в 80–115 раз быстрее)

В 80–115 раз быстрее при работе с горячим кэшем (например, при воссоздании виртуальной среды или обновлении зависимостей).

Источник

Создание venv

Это примерно в 80 раз быстрее, чем python -m venv, и в 7 раз быстрее, чем virtualenv.

Источник

Больше информации можно найти на этой странице бенчмарков Astral.

Установка трансформеров

Я протестировал uv на пакете трансформеров от Hugging Face.

Разница в скорости очевидна.

pip
uv

Как использовать?

Установка

# На macOS и Linux.
curl -LsSf https://astral.sh/uv/install.sh | sh
# С Homebrew.
brew install uv
# На Windows.
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"

Создание venv

uv venv  # Создание виртуальной среды с помощью .venv.

Активация venv

# На macOS и Linux.
source .venv/bin/activate

# На Windows.
.venv\Scripts\activate

Установка пакетов

uv pip install flask                # Установка Flask.
uv pip install -r requirements.txt # Установка из файла requirements.txt.
uv pip install -e . # Установка текущего проекта в режиме редактирования.
uv pip install "package @ ." # Установка текущего проекта с диска.
uv pip install "flask[dotenv]" # Установка Flask с дополнением "dotenv".

Генерация фиксированных зависимостей

uv pip compile pyproject.toml -o requirements.txt   # Чтение файла pyproject.toml.
uv pip compile requirements.in -o requirements.txt # Чтение файла requirements.in.

Синхронизация зависимостей

uv pip sync requirements.txt  # Установка из файла requirements.txt.