Обновить

Комментарии 35

# в requirements.in основные зависимости
# в requirements.txt уже полные зависимости как после freeze
uv pip compile requirements.in -o requirements.txt
uv pip sync requirements.txt

# можно просто использовать pip-tools
# но uv делает то же самое гораздо быстрее

Да и Poetry, вроде, сейчас уже считается не слишком модным, все хвалят uv.

да, в рамках продвижения rust в мир python, это актуально :)

Ага, еще год назад перешёл с поетри на uv. Еа тот момент разница в скорости резольва зависимостей была коллосальной

Выкиньте pip/poetry и заюзайте uv.

Там есть и установка питона, и lock файлы и куча других преимуществ.

например, какие у uv преимущества перед poetry кроме скорости?

Кроме скорости (которая очень важна в CI) - одной командой можно развернуть себе окружение, поставить нужную версию питона и т.д.

Ну и на него сейчас много проектов переводят (и opensourse и коммерческих).

А в poetry, что 10 команд чтобы развернуть себе окружение?
К тому же в поэзии есть команда для активации вирт. окружения в отличии от uv

Ну и на него сейчас много проектов переводят (и opensourse и коммерческих). - Все прыгают с обрыва и я прыгну

На Вашу аргументацию могу только пожелать удачи в сидении и дальше на питоне 3.11 и poetry 1.x.x в конце 2025 года)))

Так я искренне хочу уловить плюсы перехода на uv
Момент по скорости ясен, я спросил есть ли что-то еще, по факту ваших ответов судя по всему нет (без негатива).
Если есть у кого что добавить, я бы почитал, так как действительно интересно.

В uv резолвер зависимостей работает не совсем так как в Poetry, можно более гибко настроить, чтобы не ругался на ограничение сверху, например. Некоторые авторы библиотек любят зарезать версию питона сверху, типа <3.11, и это ломает резолвер зависимостей Poetry, если в других зависимостях версия питона сверху не ограничена. Ограничивать версию питона сверху - это вообще плохая практика, не надо так делать без серьёзной необходимости, вызванной совместимостью C-API и т. д. Но даже в scipy, numpy, которые сильно зависят от C-API, от этого отказались после долгих дискуссий. Контекст: https://iscinumpy.dev/post/bound-version-constraints/

В Poetry удобнее чем в uv обновлять и бампить версии зависимостей. В остальном uv лучше.

Скорость работы uv просто на порядки выше чем Poetry, особенно на огромных графах зависимостей. Он работает мгновенно там где Poetry может тупить минутами.

А что, .venv/bin/activate уже заблокировали на законодательном уровне и обязательно нужно придумывать uv activate? Если нужно что то запустить всегда есть uv run который незаметно для пользователя активирует окружение при запуске любой команды. А если нужно что то запускать несколько раз и каждый раз лень вводить uv run, все активируется по старинке потому что под капотом там обычный venv и знакомое для всех решение

Расскажите ещё о том, какие общепринятые библиотеки надо выкинуть и какие надо вместо них юзать, я с удовольствием послушаю

А про другие инструменты я и не говорил)

Просто странно вот что:

Статья для начинающих -> новички почитают статью и начнут пользоваться тем что тут написано. И только потом узнают про инструмент, который объединяет несколько инструментов, работает быстрее, активно развивается, на который немало людей переводят сейчас свои проекты и т.д.

[tool.poetry]

Здесь статья сразу палится, что устарела на год, потому что в Poetry 2.0 этот [tool.poetry] уже положено выкинуть за ненадобностью

вы перечисляете только прямые зависимости

Это принципиально ничем не отличается от вручную написанного requirements.txt

Умные группы

Здесь снова статья палится, что устарела: это уже фича не Poetry, а PEP 735

Семантическое версионирование

caret это конечно удобно, но никто не мешал писать pandas>=1.5.3,<2.0 и в старом добром requirements.txt (а начиная с Poetry 2.0 всё равно именно так и придётся писать, потому что [tool.poetry.dependencies] уже положено выкинуть за ненадобностью)

Lock-файл всегда нужно комитить в репозиторий!

А документация намекает что не всегда

Если работает локально — будет работать и на проде.

Нет, потому что разные ОС никто не отменял (особенно если у разработчиков макбуки)

poetry shell

И здесь статья в третий раз палится, что устарела, потому что эта команда уже давно не существует

FROM python:3.11-slim

Ага, значит статья устарела не на год, а на два года 🙃

но формат записи зависимостей внутри него специфичен именно для Poetry

Здесь статья продолжает палиться, что устарела, потому что уже не специфичен

Спасибо за развернутый комментарий! Чувствуется, что вы уже плотно работаете с Poetry 2.0 и новыми стандартами.

Однако цель статьи — помочь новичкам, которые прямо сейчас сидят на requirements.txt и pip, перейти на более удобный инструмент. Подавляющее большинство проектов и туториалов в сети всё ещё используют синтаксис [tool.poetry] (версии 1.x), и именно с ним читатель столкнется в 99% случаев. Грузить их сразу PEP 621 и миграцией на 2.0 — значит отпугнуть сложностью.

По пунктам:

  1. Lock-файл: Для конечных приложений (а статья ориентирована на них, боты/сайты) комитить лок — это best practice. Для библиотек — да, не стоит, но это отдельная тема.

  2. OS: Лок-файл решает проблему версий пакетов. Проблему бинарных сборок под разные архитектуры решает Docker (о чем и сказано в конце).

  3. Python 3.11: Это актуальный LTS релиз, на котором крутится огромная часть продакшена.

Ваше дополнение про Poetry 2.0 очень ценное, оно показывает вектор развития инструмента. Спасибо!

Подавляющее большинство проектов и туториалов в сети всё ещё используют синтаксис [tool.poetry]

И не надо делать ситуацию ещё хуже, захламляя интернет ещё одной заведомо устаревшей статьёй, запутывающей новичков

Грузить их сразу PEP 621 и миграцией на 2.0 — значит отпугнуть сложностью.

Грузить их заведомо нестандартным и устаревшим [tool.poetry] — значит отпугнуть запутанностью

Я понимаю что статью уже все привыкли писать нейронкой, но в комментариях то зачем её использовать так явно? Понимаю что может не хватать своих знаний и тут это норм, но весь текст?

Хахахахаа

Да он уже без нейронки жить не может)

Чел, хватит писать комментарии через LLM.

Как же вы задрали уже. Все эти смешные ролики про то что люди не могут общаться и при любом удобном случае пишут в приложение "чатгпт, он написал мне такой то комментарий, как мне ему лучше ответить", уже нихрена не смешные. Иногда хочется чтобы чатгпт сказал "остановись, дурак, и подумай что и зачем ты делаешь. Встань и посмотри в стену 5 минут, поразмышляй о жизни"

вот тоже заметил что у этого автора куча всего устаревшего, плюс часто встречает однобокость, например, lock файлы это не только фича poetry и т.п.

Статью нейросеть написала (это очень и очень заметно можно не отрицать) естественно она обучена на старых данных)

она не просто устарела, она явно написана ИИ – больше всего это заметно по ультрапафосным заголовкам типа The Old Way, особенно так любит делать Gemini

кстати, датасет Gemini как раз устарел на год

Можно вручную pip'ом все делать (в virtualenv), можно poetry. еще есть uv, а еще есть hatch/hatchling. Таки что есть самый-самый right-way? (у меня самого куча проектов и каждый по разному сделан, после того как узнал про poetry - что-то и на нем было :-))

Ну и вот эта вот строчка прямо радует:

curl -sSL https://install.python-poetry.org | python3 -

Пакет ведь есть в pypi и можно красиво ставить через pipx: pipx install poetry - и это строчка с офсайта. Зачем советовать такой опасный и грязный метод через curl | python ?

О боги!!! Я нашёл это крутое объяснение, зачем нужен poetry и чем он лучше pip. Можете смеяться, но не всем это очевидно. Автору респектище!

Для себя нашел следующее решение, не зависящее от вчено-изменяющейся инфраструктуры инструментов. environment.yaml для независимого от хоста окружения и не Pip зависимостей или Pip пакетов, но с бинарными запчастями. Потому что например использовать numpy в Ubuntu AMD CPU, а девелопить в MacOS M4 - то еще развлечение со сборкой из исходников. setup.cfg где отдельно прописаны пакеты для основного модуля, и дополнительные, подлежащих установке через package[extra-name] синтаксис, например pip install -e .[test] сделает текущий модуль доступным для редактирования на месте, установит все нужные запчасти. DevOps (или пользователь) берет модуль, выясняет своими путями какие версии пакетов его устраивают и делает requirements.txt из 10 строк + constaints.txt для своего конкретного деплоя.

setup.cfg

1) Вы таким образом просто зависите от setuptools

2) Поскольку setuptools давно поддерживает pyproject.toml, ничего не мешает прописать эти зависимости в этот самый pyproject.toml и выкинуть setup.cfg за ненадобностью

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

А вот что делать если у тебя забанили пакет (антивирус, например за текст)?

Update не пройдёт, т.к. uv и poetry анализируют все зависимости.

И ты такой радостный - добро пожаловать в 2013, ещё до pipenv... (антивирус отключить можно, но не нужно)

Нейрослоп детектед

Гайс, не ставьте плюсики статье

Автору не лайк а лайкище

Вы хотели сказать нейросети?) А зачем вам прослойка в виде автора? Задавайте вопросы напрямую не мучайте себя)

Если не охота никуда переходить есть пару удобных фишек в requirements.txt

Один файл можно влючать в другой и фиксировать версию можно нежестко с помощью ~=

например в requirements_dev.txt может быть что-то типа того

-r requiremets.prod

pytest ~=7.0.0

тогда у вас есть разные файлы для установки окружений и свежии версии брать я без мажорных изменений.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации