Python

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