Существует способ уменьшить объем кода в стандартной библиотеке Python — удалить мертвые или умирающие батареи. Предполагается, что библиотека пакетов PyPI может взять на себя нагрузку. Новые исследования показывают, что в этом могут быть некоторые трудности.
Python часто выставляется как «язык, включенный в комплект поставки». Причина в том, что он имеет стандартную библиотеку, которая включает в себя многие функции, необходимые для начала работы над проектом. Это имеет много преимуществ. Во-первых, вам не нужно оглядываться, чтобы узнать, какой модуль лучше всего использовать для какой-либо задачи. Если он находится в стандартной библиотеке, вы просто используете его и придерживаетесь его, если только нет веской причины для замены. Это означает, что большинство программистов на Python будут использовать один и тот же модуль для выполнения одной и той же задачи, и это означает, что растет количество знаний сообщества о том, как это сделать.
Это звучит здорово, но, по-видимому, усилия, необходимые для поддержания стандартной библиотеки, оказываются слишком большими, и есть «мертвые батареи», а также живые. Предложение состоит в том, что стандартная библиотека должна быть уменьшена, а удаленные модули должны попасть в репозиторий, такой как PyPI.
Это ужасная идея.
Некоторые исследования Итана Боммарито и Майкла Джея Боммарито II в Мичиганском университете дают вам некоторое представление о том, что на самом деле представляет собой растянутый беспорядок PyPI:
Существует в общей сложности 2,4 ТБ пакетов выпуска, и он быстро растет. Сообщается, что ежегодный совокупный темп роста составляет 47,31% для активных пакетов, а число авторов растет на 39,3%.
Это еще интереснее:
Мы обнаружили, что большинство пакетов и выпусков довольно малы, со средним размером выпуска 22,6 Кб и средним размером пакета 40,0 Кб. Тем не менее, снова появляется правый перекос, причем самые большие выпуски весят почти 600 мегабайт, а самые большие пакеты используют почти 175 гигабайт. Вместе четыре пакета “глубокого обучения” tf-nightly, mxnet-cu100mkl, mxnet-cu100 и tf-nightly-gpu используют около 500 гигабайт хранилища PyPI — почти 25% всего хранилища PyPI.
Также интересен ассортимент лицензий:
Семейство лицензий
%
МТИ
60%
GPL
16%
BSD
11%
Апач
8%
с 27% назначенных как «неизвестные» и 0,1% патентованных лицензий. Ясно, что пакет, который вы используете, будет зависеть от лицензии, и вам придется узнать, прежде чем использовать его.
Еще одна интересная статистика заключается в том, что только 24% модулей считаются «готовыми к производству/стабильными». Большинство, 28% находятся в бета-версии и 22% — в альфа-версии. Конечно, то, что означают эти термины, очень изменчиво. Хорошо реализованная альфа-версия может быть предпочтительнее не столь стабильного готового к производству пакета.
Итак, является ли PyPI альтернативой «включенным батареям»? Трудно понять, как это могло быть. Если вы ищете пакет на PyPI, вы, скорее всего, получите несколько сотен результатов, и вопрос в том, какой из них использовать? Например, стандартная библиотека имеет базовый веб-сервер, который очень полезен для небольших проектов и, в частности, для приложений Интернета Вещей. Если вы ищете «веб-сервер» на PyPI, вы получаете 10 000 обращений, не имея понятия о том, что «рекомендуется». Если вы отфильтруете по «производство/стабильность», вы все равно получите 4228 просмотров. Если вы сузите его до HTTP-серверов, вы получите гораздо лучшие 36 обращений, но все равно не сможете определить, какой из них стоит вашего времени.
Включенные батареи-это гораздо лучший способ, чем этот бесплатный для всех.
Одним из возможных решений является расширение стандартной библиотеки за счет аккредитованных модулей в библиотеке PyPI. Как сделать «аккредитацию» — это проблема, которую нужно решить.
Майк Джеймс-поклонник Python и автор книги Programmer’s Python: Everything-это объект, опубликованный I/O Press как часть библиотеки I Programmer. С подзаголовком «Что-то совершенно другое» это первый том его трилогии о Питоне.