Перетяжка, Премия ТПрогер, 13.11
Перетяжка, Премия ТПрогер, 13.11
Перетяжка, Премия ТПрогер, 13.11

Обновление urllib3 доказало — DeprecationWarning мертв. Python-экосистема его просто не видит

Новости

И с этим явно надо что-то делать

567 открытий8К показов
Обновление urllib3 доказало — DeprecationWarning мертв. Python-экосистема его просто не видит

Разработчик Сэт Ларсон рассказал о неожиданном эффекте, с которым столкнулась команда urllib3 — одной из самых популярных библиотек в Python-экосистеме.

В версии urllib3 2.6.0 разработчики удалили несколько API, которые считались проблемными еще с 2019 года и были официально помечены как устаревшие с 2022-го.

Все было сделано «по правилам»: предупреждения в документации, changelog, отдельные сообщения через DeprecationWarning при каждом использовании устаревших методов.

Казалось, что сигнал более чем очевидный. Но на практике это не сработало.

После релиза выяснилось, что удаление API стало сюрпризом даже для активно поддерживаемых проектов — зависимых библиотек и крупных клиентов.

Почему предупреждения никто не заметил

Ключевая проблема в том, что DeprecationWarning в Python по умолчанию отключен. Он находится в списке предупреждений, которые интерпретатор просто игнорирует, если разработчик явно не включил их показ.

Курс «Разработка на Python» от Академии ТОП
  • от 17910₽ до 214920₽
  • Множество филиалов в Москве и других городах и онлайн
tproger.ru

В итоге ситуация выглядела так: API годами «кричал» о своей устарелости, но его никто не слышал.

Когда методы удалили, пользователи и сопровождающие популярных библиотек — Kubernetes-клиента, Fastly, Airflow — столкнулись с поломками и неожиданными ошибками.

По словам Ларсона, обратная связь была однозначной: разработчики не видели предупреждений и не понимали, что API вот-вот исчезнет. В результате команде urllib3 пришлось срочно вернуть удаленные методы обратно и выпустить исправляющий релиз.

Предупреждение есть, эффекта нет

Вывод автора жесткий: DeprecationWarning в текущем виде не работает для Python-библиотек. Он формально существует, но экосистема его просто не воспринимает как сигнал к действию.

Парадокс в том, что сам механизм warnings в Python удобный и встроенный прямо в язык. Но именно DeprecationWarning оказался слишком «вежливым» — он не мешает, не ломает код и потому остается незамеченным.

Какие есть варианты выхода

Ларсон рассматривает несколько возможных путей:

  • создавать собственные предупреждения на базе UserWarning, которые не игнорируются по умолчанию;
  • отказаться от длительных периодов устаревания и делать более частые мажорные релизы по SemVer, как это принято в криптографических библиотеках;
  • менять культуру работы с предупреждениями в Python — но это долгий и малореалистичный путь.

Что это значит для экосистемы

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

Для разработчиков библиотек это тревожный сигнал: если вы полагаетесь только на стандартные предупреждения, велика вероятность, что их просто никто не увидит — до тех пор, пока API не исчезнет и все не сломается.

Следите за новыми постами
Следите за новыми постами по любимым темам
567 открытий8К показов