Python — это эксперимент о том, сколько свободы нужно давать программистам. Предоставь им слишком много свободы, и никто не сможет прочесть чужой код. Если дать слишком мало свободы, то под угрозой окажется выразительность языка. — Гвидо ван Россум
Эта свобода, о которой говорит Гвидо, частично объясняет популярность Python. А популярность, вкупе с другими факторами, привлекает к языку все большее количество разработчиков, что ведет к появлению действительно классных проектов с открытым кодом.
Я довольно часто просматриваю проекты на GitHub. И в этой статье расскажу о десяти полезных пакетах. Начну с наименее популярных и закончу на… Flask.
Давайте начнем!
Loguru — простота логирования
Это очень классный пакет, которым я постоянно пользуюсь. Он описывается как: «библиотека, которая привнесет приятное логирование в Python». Данный пакет позволяет вам быстро настраивать логи с помощью готовых решений.
Все, что от вас требуется после установки, — это импортировать модуль:
from loguru import logger
Теперь можете пользоваться готовыми настройками:
logger.debug("Hello, cool debugger")
Пакет снабжен хорошей документацией и множеством настраиваемых опций.
more-itertools
Целый набор интересных методов, которые периодически очень выручают. Например, peekable
:
>>> p = peekable(['a', 'b'])
>>> p.peek()
'a'
>>> next(p)
'a'
или chunked
:
>>> list(chunked([1, 2, 3, 4, 5, 6], 3))
[[1, 2, 3], [4, 5, 6]]
MonkeyType — генератор аннотаций статических типов
monkeytype run myscript.py
Этот пакет автоматически генерирует статическую типизацию: либо в файле-заглушке, либо в самом исходном коде, собирая типы выполнения. Да, все верно — Python не заставляет вас пользоваться аннотациями. Тем не менее, я верю в то, что они очень важны для читабельности кода (и в ряде случаев — для предотвращения ошибок). Поэтому ниже я добавил еще 2 пакета, обрабатывающих аннотации типов.
Pyright — проверка статических типов
Новый перспективный пакет от Microsoft. Первый коммит вышел только 17 дней назад! Данный пакет является конкурентом Mypy (он тоже попал в этот список). Честно говоря, я еще не успел проверить весь функционал, но однозначно сделаю это. Пока что для проверки статических типов я пользуюсь Mypy, но Pyright тоже стоит попробовать!
requests-async — поддержка синтаксиса async/await для requests
Это новый пакет, который я нашел на GitHub. Он кажется весьма перспективным. Все мы знаем о пакете requests, который позволяет с легкостью обрабатывать HTTP запросы в коде. А этот пакет реализует async
и await
слова для тех же запросов:
import requests_async as requests
response = await requests.get('https://example.org')
print(response.status_code)
print(response.text)
Круто, да?
HTTPie — современная командная строка с cURL
Те из вас, кто когда-либо пользовался cURL, уже знают, что веселого там мало. Нужно помнить названия параметров, проверять, что данные инкапсулировались… вообще, HTTPie может упростить эту работу. Вот небольшой пример по отправке данных с формы:
http -f POST example.org hello=World
pipenv — удобные пакеты для Python
Для каждого нового проекта я всегда создаю новую virtualenv
и устанавливаю базовые пакеты с pip
. Затем мне нужно сохранить названия этих пакетов в файле. Допустим, setup.py
или requirements.txt
. Те из вас, кто уже работал с npm
, знают, что там дело обстоит намного проще. Все, что вам нужно, — это прописать npm —save
, и название пакета сохранится в package.json
. Именно поэтому я сначала создал pypkgfreeze — простой пакет для «заморозки» версий ваших текущих pip
пакетов в setup.py
.
В любом случае, pipenv — это довольно интересное решение, нацеленное на объединение двух миров. Лучше всего оно описано на странице репозитория:
Данный пакет автоматически создает и управляет virtualenv для проектов, а также добавляет/удаляет пакеты из Pipfile
при установке/удалении пакетов. Он также генерирует мега-важный Pipfile.lock
, который нужен для создания детерминированных сборок.
Попробовать можно здесь.
mypy — проверка статических типов
Как уже было сказано, я сам пользуюсь этим пакетом в качестве стандартного средства для проверки статических типов. На мой взгляд, он помогает поддерживать читабельность и элегантность кода.
black
Я испробовал различные средства форматирования на Python, и black
по праву считается моим любимчиком. Синтаксис выглядит красиво, командная строка выполняется быстро и может как проверять файлы, так и редактировать их. Это очень полезно при развертке с использованием CI/CD. Попробовать можно здесь!
flask
Не думаю, что смогу написать здесь что-то новое. Вы, наверное, уже знакомы с этим выдающимся микро-фреймворком. Если нет… то однозначно попробуйте.
Перевод статьи Adam Goldschmidt: 10 External Python packages you are going to love