15 Python-пакетов, которые нужно попробовать

Перед началом статьи хочу сказать, что еще больше полезной и нужной информации вы найдете в нашем Telegram-канале. Подпишитесь, мне будет очень приятно.

Python

Подборка самых полезных и разноплановых Python-пакетов с PyPI.

За что мы любим Python? Для начала это — красивый и простой в изучении язык. Но есть и другая причина: Python поставляется с батареей возможностей. Это означает, что по умолчанию в Python уже добавлено множество полезных библиотек. Но, на мой взгляд, популярным и мощным Python делают 230 тысяч пакетов, созданных пользователями.

В данной статье я подобрал для вас 15 пакетов, которые за 10 лет моей работы с Python принесли мне максимум пользы. Давайте начнем!

1. Dash

Dash появился не так давно. Это идеальное решение для создания приложений по визуализации данных на чистом Python. То есть такой пакет крайне полезен для всех, кто работает с данными. Dash — это смесь Flask, Plotly.js и React.js.

Пример Dash-приложения (скриншота автора)

Dash позволяет быстро разместить данные на красивом дашборде, не прикасаясь к JavaScript.

2. Pygame

Pygame — это модуль-обертка для мультимедийной библиотеки SDL. Simple DirectMedia Layer представляет собой кроссплатформенную библиотеку разработки, которая дает низкоуровневый доступ к:

  • аудио;
  • клавиатуре;
  • мыши;
  • джойстику;
  • графическим аппаратным средствам через OpenGL и Direct3D.

Pygame портативен и запускается практически на всех платформах и операционных системах. Несмотря на то, что Pygame — это, в первую очередь, игровой движок, он вполне сгодится для простого воспроизведения mp3-файлов из Python-скриптов.

У Pygame есть свой сайт с англоязычными уроками и инструкциями по установке.

3. Pillow

Pillow является ответвлением Python Imaging Library. Эта библиотека подойдет для создания миниатюр, преобразования в различные форматы, наложения фильтров, вращения и отображения изображений и т.д. Pillow — идеальный вариант для пакетной обработки большого количества изображений.

Для большей наглядности приведу пример того, как вы можете отобразить изображение из Python-кода:

from PIL import Image im = Image.open("kittens.jpg") im.show() print(im.format, im.size, im.mode) # JPEG (1920, 1357) RGB

Либо сделать тоже самое из Python Shell или IPython:

Это я — любуюсь котятами, занимаясь своей работой

Почитать описание всех функций можно в документации.

4. Colorama

Colorama помогает добавить цвета в терминал:

Скриншот Jonathan Hartley из Colorama

Причем делается все очень просто. Вот небольшой пример кода:

from colorama import Fore, Back, Style print(Fore.RED + 'some red text') print(Back.GREEN + 'and with a green background') print(Style.DIM + 'and in dim text') print(Style.RESET_ALL) print('back to normal now')

Этот пакет отлично украшает Python-скрипты. Документация проста и понятна, почитать ее можно на странице Colorama в PyPI.

Если хотите, чтобы Colorama работала под Windows, то вначале вызовите colorama.init().

5. JmesPath

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

Но в стандартном пакете есть и кое-что, чего вам может не хватать. Если вы пользуетесь json.loads(), а данные из словаря получаете вручную (возможно, добавляя какие-то циклы), то готовьтесь сильно удивиться!

JMESPath (читается как «JAMES PATH») делает работу с JSON на Python еще проще. Теперь вы можете декларативно указывать, как извлекать элементы из JSON-документа. Вот несколько примеров, иллюстрирующих возможности JMESPath:

import jmespath # Получаем определенный элемент d = {"foo": {"bar": "baz"}} print(jmespath.search('foo.bar', d)) # baz # С помощью подстановочного знака получаем все названия d = {"foo": {"bar": [{"name": "one"}, {"name": "two"}]}} print(jmespath.search('foo.bar[*].name', d)) # [“one”, “two”]

Это лишь небольшая часть того, что может JMESPath. Почитать подробнее можно в документации и на странице PyPI.

6. Requests

Requests основан на самой часто скачиваемой Python-библиотеке — urllib3. Requests максимально упрощает веб-запросы, оставаясь при этом чрезвычайно мощным и разноплановым инструментом. Скорее всего, вы уже знакомы с этим пакетом, но без него мой список был бы неполным.

Просто, чтобы показать вам, как легко работать с Requests:

import requests r = requests.get('https://api.github.com/user', auth=('user', 'pass')) r.status_code # 200 r.headers['content-type'] # 'application/json; charset=utf8' r.encoding # 'utf-8' r.text # u'{"type":"User"...' r.json() # {u'disk_usage': 368627, u'private_gists': 484, ...}

Это простейший пример. В Requests есть и более продвинутые опции. Например:

  • аутентификация;
  • использование cookies;
  • выполнение POST, PUT, DELETE и т.д.;
  • использование пользовательских сертификатов;
  • работа с сеансами;
  • работа с прокси;
  • … и многое другое!

Полезные ссылки:

7. Simplejson

Что не так с нативным JSON-модулем в Python? Ничего! Более того, json в Python — это и есть simplejson. То есть Python берет версию simplejson и добавляет ее в каждый свой релиз. А в использовании simplejson есть свои преимущества, ведь он:

  • поддерживается в большем количестве версий Python;
  • обновляется чаще, чем стандартный модуль Python;
  • содержит дополнительные части, написанные на С, из-за чего работает очень быстро.

Поэтому часто в скриптах, работающих с JSON, вы можете увидеть следующее:

try: import simplejson as json except ImportError: import json

Лично я стараюсь пользоваться стандартным JSON, кроме случаев, когда мне нужны:

  • быстрая скорость;
  • что-то, чего нет в стандартной библиотеке.

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

8. Emoji

Пакет Emoji либо впечатляет, либо огорчает. Все зависит от самого «оценщика». Шутки шутками, но этот пакет мне очень помог при анализе данных из соцсетей.

Для начала установим модуль emoji:

pip3 install emoji

После установки можно делать следующее:

import emoji result = emoji.emojize('Python is :thumbs_up:') print(result) # 'Python is ?' # Можно написать то же самое наоборот: result = emoji.demojize('Python is ?') print(result) # 'Python is :thumbs_up:'

Почитать документацию и ознакомиться с другими примерами можно на странице пакета emoji.

9. Chardet

Модуль Chardet используется для определения кодировки файла или потока данных. Этот пакет очень выручает при анализе больших полотен разного текста. Также Chardet пригодится при работе с удаленно скачанными данными в неизвестной вам кодировке.

После установки Chardet у вас появится дополнительный инструмент командной строки под названием chardetect. Им можно пользоваться вот так:

chardetect somefile.txt somefile.txt: ascii with confidence 1.0

Конечно же, никто не запрещает работать с библиотекой классическим (программным) способом. Подробнее см. документацию.

10. Python-dateutil

python-dateutil предлагает мощные расширения стандартного модуля datetime. Мой профессиональный опыт подсказывает, что там, где заканчивается стандартный функционал datetime в Python, начинается сфера python-dateutil.

С этой библиотекой можно сделать столько всего полезного. Пожалуй, я ограничусь одним примером, который помогал мне чаще всего, — нечетким разбором (парсингом) дат из файлов журнала и т.п.:

from dateutil.parser import parse logline = 'INFO 2020-01-01T00:00:01 Happy new year, human.' timestamp = parse(logline, fuzzy=True) print(timestamp) # 2020-01-01 00:00:01

В документации перечислены остальные возможности python-dateutil, включая:

  • вычисление относительной погрешности, или дельты, за отдельный период (следующий месяц, следующий год, следующий понедельник, последняя неделя месяца и проч.) или между двумя объектами даты;
  • вычисление дат по рекуррентным правилам с использованием надмножеств спецификации iCalendar;
  • реализацию часового пояса (tzinfo) для файлов tzfile (/etc/localtime, /usr/share/zoneinfo и т.д.), TZ-строки окружения (во всех известных форматах), файлов формата iCalendar, выбранных диапазонов (с помощью дельт), часового пояса локальной машины, фиксированного сдвига часового пояса, часового пояса UTC и часового пояса из реестра Windows;
  • внутреннюю актуальную информацию о часовых поясах во всем мире из базы данных Олсона;
  • расчет дат Пасхи за любой год по католическому, православному и юлианскому календарю.

11. Индикаторы состояния: progress и tqdm

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

Вы можете создавать свои индикаторы состояния. Это весьма увлекательное занятие. Но делать то же самое с progress или tqdm куда быстрее и надежнее.

Progress

Progress помогает создавать индикаторы состояния с минимальными усилиями:

from progress.bar import Bar bar = Bar('Processing', max=20) for i in range(20): # Какая-то работа bar.next() bar.finish()

Анимация ниже наглядно показывает все доступные типы индикаторов:

Краткую и понятную документацию по библиотеке можно почитать на PyPI-странице.

tqdm

tqdm является чуть более современным аналогом progress, выполняющим те же функции. Для начала небольшая демонстрация возможностей:

В tqdm есть своя изюминка — им можно пользоваться в командной строке:

$ tar -zcf - docs/ | tqdm --bytes --total `du -sb docs/ | cut -f1` \ > backup.tgz 32%|██████████▍ | 8.89G/27.9G [00:42<01:31, 223MB/s]

Больше примеров и документацию можно найти на Github-странице tdqm.

12. IPython

Источник: страница скриншотов Python

Что-то мне подсказывает, что все вы знаете об интерактивной оболочке Python. Это отличный способ покопаться внутри Python. Но знаете ли вы, что существует оболочка и для IPython? Если вы во всю работаете с интерактивной оболочкой, но не знаете самого IPython, то однозначно присмотритесь к этому пункту!

Вот ряд возможностей, которые предлагает расширенная оболочка IPython:

  • комплексная интроспекция объекта;
  • история ввода, которая хранится в течение сеансов;
  • кэширование результатов вывода в течение сеанса с автоматически генерируемыми указателями;
  • автозавершение нажатием клавиши Tab; встроенное автозаполнение переменных и ключевых слов Python, имен файлов и ключевых слов функций;
  • «магические» команды для управления окружением и выполнения различных задач, связанных с IPython или операционной системой;
  • ведение журнала и перезагрузка сеансов;
  • интегрированный доступ к отладчику pdb и профайлеру Python;
  • малоизвестная особенность IPython: ее архитектура подходит для параллельных и распределенных вычислений.

IPython — это ядро блокнотов Jupyter. Jupyter Notebook — это веб-приложение с открытым кодом, которое позволяет создавать и обмениваться документами с живым кодом, уравнениями, визуализациями и текстовыми описаниями.

13. Homeassistant

Скриншот автора

Я обожаю домашнюю автоматизацию. Это не просто мое хобби, но и нечто, контролирующее большую часть моего жилища. Поэтому к данному вопросу я подхожу весьма серьезно. Все системы в моем доме связаны через Home Assistant. Это полноценное приложение, которое можно установить и в виде Python-пакета из PyPI.

  • У нас автоматизированы почти все лампы и жалюзи.
  • Я отслеживаю потребление газа, а также потребление и выработку энергии (солнечные батареи).
  • Я могу отследить местоположение почти всех наших телефонов и выполнить ряд действий при попадании в определенную зону (например, когда я приезжаю домой, включается свет в гараже).
  • Кроме того, автоматика управляет всеми развлекательными системами. Например, Samsung TV и колонками Sonos.
  • А еще она может автоматически обнаруживать большинство устройств в сети, что в разы облегчает нашу жизнь.

Вот уже более 3 лет я каждый день пользуюсь Home Assistant, и все это время он доступен в бета-версии. Тем не менее, это лучшее из всего, что я пробовал. Home Assistant может интегрировать и управлять любыми устройствами и протоколам. Кроме того, он бесплатен и написан с открытым кодом.

Если вы интересуетесь домашней автоматизацией, то однозначно попробуйте Home Assistant! Более подробная информация доступна на их сайте. Если получится, то саму платформу можно скачать с Raspberry Pi. Это простой и безопасный способ начать работу. Я установил Home Assistant на более мощный сервер — внутри Docker-контейнера.

14. Flask

Flask — это моя любимая библиотека для создания быстрых веб-сервисов или простых сайтов. Flask — это микрофреймворк. Его задача — сделать ядро простым и расширяемым. Всего для Flask написано свыше 700 расширений — как официальных, так и созданных сообществом.

Если вы знаете, что в скором времени займетесь разработкой крупного веб-приложения, то стоит присмотреться к полноценному фреймворку. Самым популярным в этой категории считается Django.

15. Beautiful soup

Когда вы вытаскиваете HTML с какого-то сайта, то сначала проводите его разбор и отсекаете все ненужное. Beautiful Soup — это Python-библиотека по сбору данных из HTML и XML-файлов. В ней представлены простые методы для навигации, поиска и изменения дерева разбора, или парсинга. Это очень мощная библиотека, которая умеет обрабатывать все виды HTML, даже если он сломан. Уж поверьте моему опыту, HTML ломается довольно часто, поэтому такая функция окажется как нельзя кстати.

Основные функции:

  • Beautiful Soup автоматически преобразует входящие документы в Юникод, а исходящие — в UTF-8. С ним можно не думать о кодировках.
  • Beautiful Soup стоит во главе популярных Python-парсеров (lxml и html5lib). Вы можете опробовать различные стратегии парсинга или обменять скорость на гибкость.
  • Beautiful Soup парсит все, что видит, и выполняет обход дерева. Вы можете сказать ему: «Найди все ссылки» или «Найди заголовок таблицы, выделенный жирным, и покажи этот текст».
0
19 комментариев
Написать комментарий...
Sergei Zotov

Очень удивлен отсутствием Pandas. И приятно удивлен тем, что указаны Dash и tqdm. Был бы рад такую статью прочитать пару-тройку лет назад, конечно :)

Ответить
Развернуть ветку
Александр

Хорошо бы найти постоянный канал с постоянными разборами пайтоновских библиотек.

Ответить
Развернуть ветку
Konstantin Grudnev

awesome списки https://awesome.re/ и libhunt и никаких разборов не надо

Ответить
Развернуть ветку
Александр

Спасибо! Изучу!

Ответить
Развернуть ветку
Daniil Lebedev
Автор

Спасибо за ваш комментарий! Постараюсь как можно чаще публиковать статьи на тему Python библиотек :)

Ответить
Развернуть ветку
Никита Салтанюк

Спасибо большое за хорошую, информативную и полезную статью )

Ответить
Развернуть ветку
Daniil Lebedev
Автор

Спасибо вам за хороший комментарий! :)

Ответить
Развернуть ветку
Konstantin Grudnev
Ответить
Развернуть ветку
Andrey Smolnikov

Библиотеки конечно интересные и сам многие из них использую, но пост пахнет банальщиной и неформатом для vc. Для хабра бы зашло, а зачем тут народу ваш progress из консоли и pip3 непонятно. 

Ответить
Развернуть ветку
Artem Sovetnikov

Эмоджи то тут причём? Ну напишите вы про celery, dramatiq, про pandas вам уже написали, куча must have пакетов

Ответить
Развернуть ветку
Артём А.

Господи, какая же мешанина!
Обожаю статьи в духе "15 никак не связанных рандомных <entity_name>"

Ответить
Развернуть ветку
Andrey

а мне понравилось!
удивлен DISTUTIL! я бы делал спокойно модулем TIME через шаблон методом strptime, но тут никакого шаблона не требуется!
такие статьи только джунам или ниже.

Ответить
Развернуть ветку
Сергей Горбунов

А мне на данный момент очень нужна библиотека, с помощью которой я смогу в заготовленный xlsx шаблон занести данные. Делаю сайт на django и пока не нашел решения.

Ответить
Развернуть ветку
Данияр Капкаев

openpyxl

Ответить
Развернуть ветку
Александр Щеглов

xlsxwriter вам в помощь

Ответить
Развернуть ветку
Konstantin Grudnev
Ответить
Развернуть ветку
Александр

Благодарю, пригодится!)

Ответить
Развернуть ветку
Александр

)

Ответить
Развернуть ветку
Андрей
Ответить
Развернуть ветку
16 комментариев
Раскрывать всегда