Заголовок этого поста является отсылкой к книге Glyph «Упаковка Python теперь хороша». Я думаю, можно с уверенностью сказать, что за эти 8 лет мы прошли путь от «хорошего» до «отличного». Продолжайте читать мои рассуждения.
Я утверждаю, что две основные трудности при упаковке Python:
Самозагрузка была проблемой, которой часто пренебрегали. Должны ли мы советовать людям устанавливать Python с https://python.org? Дистрибутив Анаконды? Как нам помешать людям использовать системный менеджер пакетов и рисковать всем сломать?
И не забывайте весь жизненный цикл виртуальной среды. Это просто безумие, насколько я оцепенел от этого, будучи давним пользователем Python, но каждый раз, когда мне приходится это объяснять, я вижу лица своих учеников и думаю: «Это нехорошо».
Конечно, есть и другие проблемы, например, как создавать и публиковать распространяемые пакеты. Но я утверждаю, что это не влияет на большинство новичков в Python. Более того, они также находятся в процессе решения. Читайте дальше.
15 февраля Astral выпустила uv, и я немедленно покинул корабль. По работе мне регулярно приходится устанавливать множество потенциально конфликтующих зависимостей, и UV принесло немедленное облегчение.
Но самое интересное то, что теперь uv вышел далеко за рамки первоначальной фазы «быстрого pip» и выполняет свое обещание стать «комплексным менеджером проектов и пакетов Python, который будет быстрым, надежным и простым в использовании».
]Вернувшись к проблемам начальной загрузки и активации, о которых я упомянул в самом начале, как их решает uv? Подумайте об этом:
По сути, это:
$ 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 пошла дальше и решила другие проблемы с взаимодействием с разработчиками, за что я рад и благодарен.
Я эффективно использую УФ для всего и не оглядываюсь назад. Я буду продолжать рекомендовать этот инструмент всем, продолжать говорить о нем и надеюсь, что он станет более распространенным.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3