Привет, Хабр! Это моя первая статья и я пишу ее в рамках конкурса «Сезон Open Source на Хабре». Сегодня я хочу рассказать о своем pet-проекте, Clite — это легковесный, фреймворк на Python для создания CLI.
О проекте и его цели
Название фреймворка вдохновлено СУБД SQLite, легкой альтернативой современным PostgreSQL, MySQL. Так же и я позиционирую фреймворк как легкая альтернатива Typer, Click и другим похожим фреймворкам.
Цель проекта показать что любой может создать свое CLI приложение при этом используя минимум зависимостей и максимум возможностей языка Python.
История появления
Изначально меня вдохновил аналогичный пакет от Себастьяна Рамиреcа — Typer. Это тоже фреймворк на базе подсказок типов для создания CLI.
Ниже пример простого кода:
from typer import Typer app = Typer( name="myapp", ) @app.command() def hello(name: str): print(f"Hello, {name}!") if __name__ == "__main__": app()
Вот выглядит запуск команды и вывода
> python main.py Alice Hello, Alice!
Выглядит круто? Но давайте залезем в «кишочки» Typer и изучим подробнее на чем он базируется.
❯ uv tree --package typer Resolved 11 packages in 0.51ms typer v0.15.3 ├── click v8.1.8 ├── rich v14.0.0 │ ├── markdown-it-py v3.0.0 │ │ └── mdurl v0.1.2 │ ├── pygments v2.19.1 │ └── typing-extensions v4.13.2 ├── shellingham v1.5.4 └── typing-extensions v4.13.2
Как видно по зависимостям typer основан на
-
Click — фреймворк для создания CLI, но не использующий type hints для описания команд, аргументов и флагов.
-
Rich — библиотека для стилизации CLI.
-
Shellingham — библиотека для определения shell-оболочки в которой запущен файл Python.
-
typing-extensions — библиотека, которая добавляет новые функции из typing в старые версии Python.
Теперь посмотрим на Clite и разберемся чем он похож на Click и Typer, и в чем его отличие.
Пример кода:
from clite import Clite app = Clite( name="myapp", ) @app.command() def hello(name: str): print(f"Hello, {name}!") if __name__ == "__main__": app()
Пример команды:
> python main.py hello Alice Hello, Alice!
Теперь проверим зависимости
❯ uv tree --package clite Resolved 3 packages in 0.35ms clite v0.2.2 └── typing-extensions v4.13.2
Из примера видно 2 отличия:
-
Clite имеет немного другой вызов команды 😀
-
Не имеет сторонних зависимостей кроме typing-extensions
Тогда в чем разница, если мы получаем одно и тоже? А разница в том мои дорогие читатели что Clite использует свой парсер команд, аргументов и флагов. Не базируется ни на каком Click, Typer. А просто использует практически всю мощь языка Python.
Из того что уже имеет Clite, это:
-
Парсинг команд, аргументов и флагов
-
Поддержка type hint-ов, сейчас простых по типу int, str и тд. но дальше будет больше
-
Декораторы подобные FastAPI, Flask, Typer, Click
-
Небольшая документация с референсами на код
Что дальше?
На момент написания статьи Clite имеет версию 0.2.2.
В этом году планируется:
-
Улучшить парсер
-
Добавить поддержку
Annotatedдля аргументов и флагов -
Добавить поддержку sub-команд
-
Добавить свою реализацию
echo
Также можно ознакомиться с roadmap-ом в документации
Подписывайтесь на мой telegram-канал — тут больше мыслей про разработку и жизнь в IT.
Заключение
В конце хочу сказать «спасибо» Хабру и конкурсу от GitVerse, которые смотивировали меня рассказать о своем pet-проекте. Также если вы хотите внести свой вклад в развитие Clite, не постесняйтесь оставить свое Issue.
ссылка на оригинал статьи https://habr.com/ru/articles/909824/
Добавить комментарий