TGViewer
Находки в опенсорсе Находки в опенсорсе @opensource_findings · 12.6K subscribers
Post #981 11.4K
Я попробовал uv, обплевался и вернулся на poetry

Если вы последние полгода не читали чат, то вы не знаете, как сильно у меня горело после перехода на uv. Сейчас расскажу! Данный пост специально написан, чтобы и у вас тоже сгорело. Если к концу вы подойдете без боли в ... душе, то все было зря.

Как все было?

Обычно, я первый прыгаю пробовать все новые и модные штуки.
Так было с Pipenv, когда он только появился. Что там творилось!
Так было с poetry, которым я начал пользоваться через год, в 2018м.
Но вот с uv так не было, потому что я не знал, зачем бы мне хотелось переехать. Быстрее?

Но ладно, мы решили попробовать его на 3х проектах. Быстро же! Ух 🌚
- https://github.com/typeddjango/django-stubs (терпим)
- https://github.com/wemake-services/django-modern-rest (сложно съехать)
- https://github.com/wemake-services/wemake-django-template (откатили)

Почему?

Ох, даже не знаю с чего начать! Я напишу только про то, с чем столкнулся лично.

- У uv нет своей системы сборки для бинарников, uv_build умеет собирать только Python пакеты. DMR компилирует часть своих исходников, нам приходится доставлять hatch (другой пакетный менеджер), чтобы вообще иметь возможность работать. Топ кек
- Полное игнорирование стандартов. PEP 751? pip.conf? Нет, не слышали.
- uv публиковал нам сломанные README в PyPI, пришлось ставить плагин
- uv ставит вам совсем не тот питон, который вы думаете. pyenv ставит вам ровно то, что вы попросили, то uv тянет "relocatable" сборку: питон собранный на одной платформе для других платформ. Будет ли все работать? Конечно же нет. Сборка с ним пакетов локально просто не работает. Разбираться в C стектрейсе я не стал, просто поставил нужный питон через pyenv
- Сломанные дефолты. uv run автоматически ставит зависимости, что скрывало от нас баг в CI (нужно ставить UV_NO_SYNC=1. uv sync создает виртуально окружение без pip (нужно указывать UV_VENV_SEED=1), из-за чего pip install package ставит пакет в глобальный pip, даже с включенным venv. Ну то есть: вирутальное окружение начинает протекать :(
- Для шаблонов uv не подходит, потому что добавляет имя пакета в uv.lock (даже когда ты явно говоришь, что сам пакет ставить не надо), если оно меняется, то лок разваливается. Нам пришлось убрать параметризацию имени пакета в шаблоне. Потом откатили
- uv записывает текущую версию проекта (не пакета) в uv.lock, что ломает релиз тулы вроде semantic-release
- uv add package добавляет его в dependencies как "package>=current.version", что ломает будущие вызовы uv sync -U, когда к нам прилетают ломающие изменений из новых мажорных версий пакетов
- Нет возможности посмотреть устаревшие пакеты как в poetry show --outdated, есть внешний плагин
- Не работает uv sync без pyproject.toml, что нужно для кеша докер слоев. Уже джва года
- uv допускает дубликаты зависимостей с разными версиями (!), что вызвало у нас странный баг
- uv self update не работал в punq из-за наличия tox-uv в зависимостях
- uv не работает с dependabot, если используется workspace, пришлось переходить на renovate. PRов просто не было. uv sync -U с workspaces крайне плохо работает, какие-то пакеты приходилось руками обновлять
- Для продвижения ty добавили более длинный алиас uvx ty: uv check

Ну и самое главное: теперь uv принадлежит OpenAI. Можно ли им доверять важную часть инфраструктуры? Я сильно сомневаюсь.

Получил ли я что-то взамен на все мои новые страдания? Пример из wemake-django-template:
- poetry: 20 секунд
- uv: 11.4 секунды
Я понимаю, что для каких-то больших проектов разница может быть значительной.

Использовать? Если вы пофиксите дефолты у себя в конфиге, у вас стандартный проект, у вас есть линтер на номера версий, бот для обновления зависимостей, и вы реально замечаете время установки пакетов локально / в CI с другими тулами.

Ключевой вопрос: может стоило просто переписать резолвер и скачивание пакетов в poetry на rust?

Обсуждение: Какой ваш опыт? Заметили ли вы, что последнее время инструменты хайпят только за счет "скорости"?
Telegram Находки в опенсорсе: чат Канал: @opensource_findings Правила: https://gist.github.com/sobolevn/d9a598a23e6bb89e51ada71033e9103f
  • ❤ 94
  • 👎 36
  • 👍 19
  • 🔥 19
  • 😱 15
  • 🤔 13
  • 💩 5
  • 👏 4
  • 😁 3
More from @opensource_findings
  1. Sep 15, 2026PEPы в Python окончательно вышли из-под контроля Давайте посмотрим, что происходит с ПЕПам…
  2. Sep 10, 2026Большая бесплатная конференция в Нижнем Новгороде 17 октября Регистрация: https://itgorky.…
  3. Sep 1, 2026Post #985
  4. Aug 24, 2026JIT могут удалить из CPython! PEP-836: https://peps.python.org/pep-0836 JIT в CPython имее…
  5. Aug 18, 2026Как AWS у опенсорсера пакеты отжимал Нерегулярная рубрика "посмотрите, что творится!". Дан…
  6. Aug 14, 2026Какие уникальные фичи есть в django-modern-rest? Иногда, когда я добавляю какие-то фичи в…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →