«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Упаковка Python сейчас великолепна: `uv` — это все, что вам нужно

Упаковка Python сейчас великолепна: `uv` — это все, что вам нужно

Опубликовано 1 сентября 2024 г.
Просматривать:449

Python Packaging is Great Now: `uv` is all you need

Заголовок этого поста является отсылкой к книге Glyph «Упаковка Python теперь хороша». Я думаю, можно с уверенностью сказать, что за эти 8 лет мы прошли путь от «хорошего» до «отличного». Продолжайте читать мои рассуждения.

Что делает упаковку Python сложной для новичков?

Я утверждаю, что две основные трудности при упаковке Python:

  • Начальная настройка, то есть с чего начать!
  • Активация, то есть как работают venvs в Python (см. мою ветку о Мастодонте, это так сложно объяснить!)

Самозагрузка была проблемой, которой часто пренебрегали. Должны ли мы советовать людям устанавливать Python с https://python.org? Дистрибутив Анаконды? Как нам помешать людям использовать системный менеджер пакетов и рисковать всем сломать?

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

Конечно, есть и другие проблемы, например, как создавать и публиковать распространяемые пакеты. Но я утверждаю, что это не влияет на большинство новичков в Python. Более того, они также находятся в процессе решения. Читайте дальше.

Введите уф

15 февраля Astral выпустила uv, и я немедленно покинул корабль. По работе мне регулярно приходится устанавливать множество потенциально конфликтующих зависимостей, и UV принесло немедленное облегчение.

Но самое интересное то, что теперь uv вышел далеко за рамки первоначальной фазы «быстрого pip» и выполняет свое обещание стать «комплексным менеджером проектов и пакетов Python, который будет быстрым, надежным и простым в использовании».

]

Вернувшись к проблемам начальной загрузки и активации, о которых я упомянул в самом начале, как их решает uv? Подумайте об этом:

  • uv не зависит от самого Python. Предварительно скомпилированные автономные двоичные файлы можно легко установить в Linux, macOS и Windows.
  • uv python управляет версиями Python! Нет необходимости прибегать к специфичным для ОС механизмам, таким как pyenv, Deadsnakes, или к тяжелым инструментам, таким как conda.
  • uv-инструмент управляет инструментами в централизованной среде! Больше нет необходимости в pipx или плавных переходах.
  • uv init создает базовый pyproject.toml, используя детеныш в качестве бэкэнда сборки и рабочий макет src с пустым README и фиктивным модулем.
    • Если вам нужно что-то более сложное, вы всегда можете использовать копировальный аппарат или формочку для печенья с более сложным шаблоном.
  • uv add добавляет зависимости в pyproject.toml, создает venv, если он не существует, и устанавливает их!
  • uv lock создает файл блокировки со всеми вашими зависимостями, который вы затем можете использовать в uv-синхронизации.
    • А если вам нужен старый добрый файл require.txt, то uv pip compile сделает это за вас, как и pip-tools!
  • uv run выполняет скрипты и команды, опять же без явной активации окружения!

По сути, это:

$ mkdir uv-playground
$ cd uv-playground
$ uv init
warning: `uv init` is experimental and may change without warning
Initialized project `uv-playground`
$ uv add click
warning: `uv add` is experimental and may change without warning
Using Python 3.12.3 interpreter at: /usr/bin/python3
Creating virtualenv at: .venv
Resolved 3 packages in 66ms
   Built uv-playground @ file:///tmp/uv-playground
Prepared 2 packages in 430ms
Installed 2 packages in 0.62ms
   click==8.1.7
   uv-playground==0.1.0 (from file:///tmp/uv-playground)
$ tree
.
├── pyproject.toml
├── README.md
├── src
│   └── uv_playground
│       ├── __init__.py
└── uv.lock

3 directories, 4 files
$ uv run python -c "from uv_playground import hello; print(hello())"
warning: `uv run` is experimental and may change without warning
Hello from uv-playground!

Поэтому на вопрос «как мне начать изучать Python на своем компьютере» теперь можно универсально ответить: «установить ув».

Некоторые размышления

Что касается виртуальных сред, я в целом согласен с Армином, когда он говорит

npm ушел без какого-либо эквивалента «активации», и я думаю, что будущая экосистема Python также больше не найдет особого применения в активации virtualenv.

Я также заметил, что uv init выбрал детеныша. У меня всегда было небольшое предпочтение ДПМ, но я думаю, что это может быть точкой невозврата.

Лии и ее участникам потребовалась большая работа, чтобы создать эту диаграмму решений для руководства по упаковке PyOpenSci. Но тот факт, что теперь есть базовый уровень, который люди могут изменить в случае, если у них есть более конкретные потребности (например, бэкэнд сборки Meson или scikit-build), снова обеспечивает гораздо лучший опыт разработки.

На конде

Тема конды и пипа — еще один распространенный источник путаницы. Я был пользователем и поклонником conda с самого первого дня, и это фактически спасло Python от явной смерти в то время, когда было очень сложно просто установить что-то в Windows.

В последующие годы я часто ссылался на старую запись в блоге Джейка ВандерПласа, объясняющую различия, но сейчас это похоже на безнадежное дело.

Проблемы совместимости между pip и conda никогда не были полностью решены, и хотя я считаю, что ребята из Pixi проделывают фантастическую работу, я думаю, что в долгосрочной перспективе ультрафиолет победит.

Я полностью признаю, что пакеты conda лучше структурированы с учетом понятия кода, отличного от Python, и что нынешний мир «толстых колес на PyPI» явно является неоптимальным решением. Но вся экосистема движется в этом направлении: большинство пакетов теперь публикуют предварительно скомпилированные диски для самых разных платформ.

Другими словами: conda, возможно, не будет так полезна в 2024 году, как в 2014 году, и, возможно, пришло время прекратить преподавать ее новичкам и считать ее продвинутым инструментом.

Заключение

Причина, по которой пока еще слишком рано, заключается в том, что некоторые из этих uv-команд все еще являются экспериментальными и могут развиваться в будущем. Но впервые я ясно вижу инструмент рабочего процесса, соответствующий стандартам, комплексный, не имеющий проблем с начальной загрузкой, тщательно разработанный и способный победить.

Это то, чего с самого начала хотели многие критики упаковки Python, верно? Не нужно выбирать из множества разных инструментов. Но я думаю, что uv пошла дальше и решила другие проблемы с взаимодействием с разработчиками, за что я рад и благодарен.

Я эффективно использую УФ для всего и не оглядываюсь назад. Я буду продолжать рекомендовать этот инструмент всем, продолжать говорить о нем и надеюсь, что он станет более распространенным.

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/astrojuanlu/python-packaging-is-great-now-uv-is-all-you-need-4i2d?1. В случае нарушения прав обращайтесь по адресу Study_golang@163. .com, чтобы удалить его
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3