Намічено велике чищення стандартної бібліотеки Python

Розробники проекту 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.8 почати виводити попередження, а 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 на вбудовуваних платформах з обмеженим розміром сховища.

Джерело: opennet.ru

Додати коментар або відгук