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



Книга Забудьте про 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.


178   0  

Comments

    Ничего не найдено.