Обложка: Python-библиотеки, которые пригодятся каждому разработчику на Python

Python-библиотеки, которые пригодятся каждому разработчику на Python

Спросили у экспертов-питонистов, какие полезные Python-библиотеки они используют и рекомендуют для других разработчиков.

Раду Карунту
Раду Карунту

разработчик хостинг-провайдера и регистратора доменов REG.RU

pydantic

Python является не типизированным языком программирования и с одной стороны — это его преимущество, которое способствует быстрому изучению и устанавливает низкий порог входа, но в какой-то момент, отсутствие типизации становится проблемой.

С помощью pydantic и подсказок типов данных из PEP 484 можно превратить python в строго типизированный язык. Особенно полезно, когда в вашем приложении есть API, но нет контрактов.

Пример кода.

loguru

Удобный логгер на смену стандартного logging. Помимо того, что не требует сложных конфигураций, обладает огромным количеством полезных фич и хорошо работает с асинхронным кодом.

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

factory_boy

Если вы покрываете свой код unit-тестами, то вам знакома ситуация, когда вы тратите время на генерацию тестовых данных и различных фикстур. Особенно актуально, когда вы используете ORM и у вас много моделей с большим количеством полей.

Вместо того, чтобы тратить время на написание различных наборов данных и хелперов-генераторов, чтобы покрыть все возможные кейсы, достаточно создать фабрику, указать тестируемую модель и при вызове указать желаемое количество фикстур.

pymystem3

Отличная Python-библиотека от Яндекс для обработки естественного языка. В отличие от pymorphy2 не так хорошо приводит слово к нормальной форме, но прекрасно, и самое главное — очень быстро, определяет часть речи и лексемы слова. Работает только с русским языком.

black

Параллельно вместе с Python развивалось и соглашение о написании кода PEP8. Кодстайл — это неотъемлемая часть любого проекта, особенно когда вы работаете в команде. Чтобы следовать всем канонам требуется много времени и практики, но чтобы ваш код всегда выглядел так как надо, можно воспользоваться black.

Этот автоформатер сэкономит ваше время, уменьшит количество замечаний на ревью и ваш код будет одинаковым всегда, независимо от проекта.

Дмитрий Бардин
Дмитрий Бардин

руководитель группы разработки ИТ-компании КРОК

На Python мы разрабатываем в основном решения в области computer vision (например, в таких) , поэтому наша подборка так или иначе с этим связана. Очень помогают:

  • Flask — микро веб-фреймворк, который позволяет быстро делать сервисы и интегрировать наши решения. Имеет много полезных расширений. Подходит и для экспериментов, и для промышленного использования.
  • Keras — классный высокоуровневый API к TensorFlow. Позволяет сильно сэкономить время и сохранить код читабельным. Достаточно низкий порог входа по сравнению с чистым TF.
  • Numpy — очень удобный инструмент для работы с многомерными массивами и матрицами, незаменима в глубоком обучении.
  • Pillow — старая добрая Python-библиотека для работы с изображениями. Много форматов, пиксельные манипуляции, фильтры, эффекты.
Дмитрий Плевков
Дмитрий Плевков

Python разработчик aim digital agency

Я включил в свой список не самые популярные, но от этого не менее полезные Python-библиотеки.

Библиотека транслитерации iuliia

Иногда возникает необходимость записать кириллические слова латиницей. Существуют разные стандарты и правила транслитерации, поэтому где-то я Dmitrij, где-то Dmitry, а где-то Dmitrii.

В библиотеке стандарты собраны воедино и корректно реализованы специальные правила для некоторых сочетаний букв и окончаний слов. На домашней странице кратко описаны различия между схемами для удобного выбора.

Комфортная валидация данных с pydantic

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

Эти данные обязательно нужно валидировать, чтобы потом не было мучительно больно. Проект pydantic позволяет избавиться от рутины и делать валидацию с комфортом для разных типов данных. Можно описать нужную структуру данных, чтобы не только проверять их на входе, но и получать подробные сообщения при наличии ошибок. Можно писать свои правила валидации для отдельных полей, валидировать некоторые поля совместно (например, если поле фамилия заполнено, то должно быть заполнено и поле имя) и многое другое.

Dramatiq для обработки распределенных задач 

Думаю практически каждый питонист сталкивался с проектом Celery.

Dramatiq — это проект человека, который настолько устал от некоторых проблем в Celery, что решил написать свой проект. Получилось очень хорошо. Если вам нужно выполнять любые задачи, которые хочется отправить в фон (перерасчёт каких-то показателей, массовое обновление различных данных из внешних сервисов, подготовка писем для рассылки, генерация отчётов и т.п.) эта библиотека для вас.

Httpx — асинхронная библиотека для работы с http 

В мире Python практически образцом по удобству использования и функциональности служит библиотека requests. К сожалению её нельзя использовать в асинхронном коде.

Авторы httpx создают асинхронную библиотеку для работы с http с таким-же интерфейсом, как у requests. Синхронно работать с httpx тоже можно.

Проект пока официально в бете, но уже довольно стабилен и используется многими программистами.

Loguru для настройки логирования

Настраивать логирование через стандартную библиотеку logging — невесёлое занятие. Если ваш проект не настолько разросся, чтобы настраивать для него syslog, journald, или ELK стек, но хорошие логи видеть уже хочется — попробуйте loguru.

Главный плюс этой Python-библиотеки — простота настройки и куча приятных плюшек из коробки:

  • подсветка сообщений разными цветами,
  • хорошее форматирование,
  • удобная настройка логирования в файлы с ротацией и архивированием и многое другое.

Python-библиотека для обнаружения дат — dateparser 

Спасительная библиотека, которая придёт на помощь, если нужно распознать дату из строк самых разных форматов. Будет полезна, если вы парсите веб-странички или какие-то логи из самых разных источников.

Может распознавать как обычные варианты, например ‘2 марта 2021 в 15:00’, ‘2021-03-04 10:01:02 UTC+3’, так и такой экстрим как ‘через 5 дней’, ‘неделю назад’. Поддерживает множество языков.

Python-библиотека для создания прогресс баров tqdm 

Иногда нужно запустить скрипт, который обрабатывает много данных (это может быть management команда для Django или просто скрипт для конвертации большого числа файлов). Если в консоли ничего не происходит, то через какое-то время кажется, что скрипт завис, непонятно, с какой скоростью продвигается процесс, сколько ещё ждать.

С помощью библиотеки tqdm можно быстро создавать индикаторы (прогресс бары) для отображения процесса работы. Из коробки интегрируется с IPython/Jupyter.

Александр Абросимов
Александр Абросимов

Senior Python Developer компании Usetech

pympler

На мой взгляд, это один из самых полезных инструментов, когда появляется необходимость измерять, отслеживать и анализировать использование памяти конкретными объектами в python приложениях.

retrying

Удобная Python-библиотека, которая позволяет повторить вызов функционала в том случае, если он не был успешно завершен. Например, это может быть полезно тогда, когда необходимо повторить запрос к какому-либо внешнему сервису, если с первого раза не получилось до него «достучаться». Само собой вы можете изменять множество переменных, например, количество попыток, время ожидания попыток и так далее.

responses

Инструмент для имитации ответов на запросы, выполненных при помощи библиотеки requests. Очень полезен при тестировании проверки поведения функционала в зависимости от того, какой ответ вернет внешний сервис.

faker

Faker позволяет генерировать фиктивные данные по различным категориям. Например, имена, адреса, данные банковских карт, телефонные номера и так далее. Список категорий действительно обширный. Достаточно часто именно эта библиотека является необходимой при тестировании функционала.

rich

Инструмент предоставляет большие возможности и удобный API для форматирования выводимого приложением текста в консоль. Позволяет менять стиль текста и его цвет, рисовать таблицы, подсвечивать синтаксис языка, работать с emoji и многое другое. Хочу обратить внимание, что библиотека написана не на python, но помогает в работе с python приложениями.

py-spy

Рy-spy — это сэмплирующий профилировщик Python приложений. Отличительной особенностью этого профилировщика является то, что он позволяет подключиться к уже работающему приложению, которое необходимо проанализировать, без добавления какого-либо кода. Инструмент предоставляет возможность в реальном времени наблюдать за тем, что в данный момент выполняется и сколько времени это занимает, накапливать информацию о работающем приложении и использовать эту информацию для, например, генерации flamegraph. Очень полезно, когда нужно найти проблему в приложении «здесь и сейчас», либо, когда нет возможности изменять код для интеграции с другими профилировщиками.

freezegun

Бывают ситуации, когда необходимо написать тесты для функциональности, которая имеет разное поведение в зависимости от текущего времени/даты. Этот инструмент как раз для таких случаев. Он позволяет зафиксировать время на том значении, которое необходимо, путем подмены модуля datetime.

funcy

Также неплохая библиотека, которая содержит в себе набор функциональных утилит.