TGViewer
Zen of Python Zen of Python @zen_of_python · 18.8K subscribers
Post #4707 3.91K
Библиотеку packaging ускорили в 3 раза

packaging — это библиотека, которую использует почти всё в Python-экосистеме для работы с версиями и зависимостями. Она встроена в pip, а pip встроен в Python — так что это буквально самая распространённая сторонняя библиотека в мире.

Когда pip резолвит зависимости, он создаёт миллионы объектов Version и SpecifierSet. Буквально миллионы — в бенчмарке, который использовал автор, было 4,8 миллиона. Каждый раз парсится регулярка, создаются объекты, сравниваются версии. Это занимает время.

➡️ Что сделал мейнтейнер библиотеки?

Взял новый статистический профайлер из Python 3.15, прогнал через него реальные данные (все версии когда-либо загруженные на PyPI) и нашёл узкие места.

Оказалось, что регулярка — не главная проблема. Основное время уходило на:
🔘Создание лишних объектов (NamedTuple внутри Version — убрал, +20%)
🔘Дублирование работы (Version создавался дважды в одном месте — исправил, +37%)
🔘Неоптимальный код (генераторы вместо map, singledispatch вместо if — переписал)

Результат:
🔘Чтение версий: 19,6 сек → 9,9 сек (2x)
🔘Проверка requires-python: 105 сек → 33,9 сек (3x)
🔘Количество создаваемых Version в pip: 4,8M → 400K

Все исправления будут в версии 26, уже вышла rc1, финальный релиз обещают на днях.

@zen_of_python
  • 👍 17
  • ❤‍🔥 6
More from @zen_of_python
  1. Sep 23, 2026Что меняет re.prefixmatch() в Python 3.15 re.match() проверяет совпадение только в начале…
  2. Sep 23, 2026Pyodide разрешил публиковать WASM-колёса прямо в PyPI В Pyodide 314.0 появилась прямая пуб…
  3. Sep 22, 2026Как применять структурное сопоставление с образцом к деревьям в Python Структурное сопоста…
  4. Sep 22, 2026Почему в Python стоит подменять свой интерфейс, а не httpx Если бизнес-тест напрямую подме…
  5. Sep 22, 2026Как точно типизировать *args и **kwargs в Python Запись *args: tuple[int, str] выглядит ка…
  6. Sep 21, 2026Как точечно сравнивать скорость функций Python с tprof Профилировщик помогает найти медлен…
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 →