Обложка канала

Geeks

11247 @g33ks

Канал от гиков для гиков. Новости технологий и ссылки на новые каналы ИТ и научной тематики.

Geeks

6 лет назад
Открыть в
Субъективный пост об используемых мною фреимворках для построения cli-утилит на Python.

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

Существует, множество сторонних фреймфорков для работы с CLI и, например, можно найти в списке репозиториев от Google на GitHub такой инструмент как python-fire. Он удобный и на нем очень быстро делать прототипы, но у меня как-то не прижился и, не в последнюю очередь, из-за своей способности пытаться автоматически скастить все входные данные по своему наитию. То есть если на вход подаются данные похожие на int, то фреимворк по умолчанию передаст вашей функции именно int и ему плевать, что вы можете ждать чего-то другого. Но благо данный инструмент не единственный и мне как-то давно была симпатична библиотека Click. Она вполне удобна и очень функциональна, бонусом позволяет обрабатывать не только аргументы, но и добавлять различные плюшки ansi-последовательностей вроде прогрессбаров и простой раскраски выводимых символов на экран. Вообще, библиотека достаточно известная и давно успела себя зарекомендовать.

Недавно, наткнулся на библиотеку Typer, построенную поверх Click. Занимается она тем же самым, но привносит одну маленькую особенность - библиотека в своей работе учитывает подсказки типов у параметров функций. И это прям мне нравится. Это, кстати, стимулирует аккуратно проставлять типы. В последних обновлениях Python можно увидеть много достаточно спорных решений, но мне кажется, что type-hints это то, чего не хватало достаточно давно и отрадно, что это получает прикладное использование. Вполне очевидный минус - Python должен быть версии не менее 3.6.

Ссылка на страницу проекта https://typer.tiangolo.com/