Во время скроллинга X (ранее Twitter) наткнулся на следующий твит:
Кто такой Чарли Марш?
Чарли Марш (Charlie Marsh) является создателем Astral — компании, которая меняет подход к работе на Python, предлагая усовершенствованный Python-инструментарий.
Astral создает инструменты, позволяющие разработчикам быстрее выпускать отличное программное обеспечение.
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 или создавать пакет.
Команда 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.
Разница в скорости очевидна.
Как использовать?
Установка
# На 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.
Читайте также:
- Практика обновления Python — опыт компании Lyft
- 10 ошибок, которые выдают новичков в Python
- Как улучшить навыки работы с Python в 2023 году
Читайте нас в Telegram, VK и Дзен
Перевод статьи Benedict Neo: Forget `pip install`, Use This Instead