Намечена большая чистка стандартной библиотеки Python
23 мая 2019 года
Разработчики проекта Python опубликовали предложение (PEP 594) по проведению значительной чистки стандартной библиотеки. К выносу из стандартной библиотеки Python предлагаются как явно устаревшие и узкоспециализированные возможности, так и компоненты, в которых имеются архитектурные проблемы и которые не удаётся унифицировать для всех платформ.
Например, из стандартной библиотеки предложено исключить такие модули, как crypt (недоступность для Windows и зависимость доступности алгоритмов хэширования от системных библиотек), cgi (неоптимальная архитектура, требуется запуск нового процесса на каждый запрос), imp (рекомендовано использовать importlib), pipes (рекомендовано использовать модуль subprocess), nis (рекомендовано использовать NSS, LDAP или Kerberos/GSSAPI), spwd (не рекомендовано напрямую работать с БД учётных записей). Для удаления также помечены модули binhex, uu, xdrlib, aifc, audioop, chunk, imghdr, ossaudiodev, sndhdr, sunau, asynchat, asyncore, cgitb, smtpd, nntplib, macpath, formatter, msilib и parser.
В соответствии с предложенным планом в Python 3.8 вышеупомянутые модули планируется отметить устаревшими в документации (частично выводить раннее предупреждение), в Python 3.9 начать выводить предупреждение, а в Python 3.10 удалить из репозиториев CPython. Модуль parser планируется удалить в версии 3.9, так как он помечен устаревшим ещё в выпуске Python 2.5, а модуль macpath в ветке 3.8. После удаления из основного состава код будет вынесен в отдельный репозиторий legacylib и его судьба будет зависеть от интереса представителей сообщества. Ожидается, что ветка Python 3.9 будет поддерживаться до 2026 года, что предоставит достаточно времени для перевода проектов на внешние альтернативы.
Изначально для удаления также были предложены модули ftplib, optparse, getopt, colorsys, fileinput, lib2to3 и wave, но их было решено пока оставить в составе стандартной библиотеки, так как они широко распространены и остаются актуальными, несмотря на наличие более совершенных альтернатив или привязки к специфичным возможностям операционных систем.
Напомним, что изначально проектом Python применяется подход "батарейки входят в комплект", при котором в стандартной библиотеке предлагается обширный набор функций для различных областей применения. Среди достоинств такого подхода - упрощение сопровождения проектов на Python и отслеживания безопасности используемых в проектах модулей. Уязвимости в модулях нередко становятся источником уязвимостей в использующих их приложениях. В случае если функции входят в стандартную библиотеку достаточно контролировать состояние основного проекта. При расщеплении стандартной библиотеки разработчикам требуется использовать сторонние модули, уязвимости в каждом из которых необходимо контролировать отдельно. При высокой степени дробления и большом числе зависимостей возникает угроза атак через компрометацию инфраструктуры разработчиков модулей.
С другой стороны, каждый дополнительный модуль в стандартной библиотеке требует ресурсов от команды разработчиков Python для сопровождения. В библиотеке накопилось большое число дублирующих и излишних функций, исключив которые можно снизить издержки на сопровождение. По мере развития каталога PyPI и упрощения процесса установки и загрузки дополнительных пакетов, применение внешних модулей в настоящее время стало столь же привычным как и использование встроенных функций.
Всё больше разработчиков используют более функциональные внешние замены стандартным модулям, например, применяют модуль lxml вместо xml. Удаление заброшенных модулей из стандартной библиотеки позволит повысить популярность активно развиваемых сообществом альтернатив. Кроме того, сокращение стандартной библиотеки приведёт к уменьшению размера базовой поставки, что актуально при использовании Python на встраиваемых платформах с ограниченным размером хранилища.
Источники
править
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.