- PVSM.RU - https://www.pvsm.ru -
Привет! Это моя первая статья и я пишу ее в рамках конкурса «Сезон Open Source на Хабре» [1]. Сегодня я хочу рассказать о своем pet-проекте, Clite [2] - это легковесный, фреймворк на Python для создания CLI [3].
Название фреймворка вдохновлено СУБД SQLite [4], легкой альтернативой современным PostgreSQL, MySQL. Так же и я позиционирую фреймворк как легкая альтернатива Typer, Click и другим похожим фреймворкам.
Цель проекта показать что любой может создать свое CLI приложение при этом используя минимум зависимостей и максимум возможностей языка Python.
Целью создания этого фреймворка вдохновил аналогичный пакет от Себастьяна Рамиреcа - Typer [5]. Это тоже фреймворк на базе подсказок типов для создания 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 [6] - фреймворк для создания CLI, но не использующий type hints для описания команд, аргументов и флагов.
Rich [7] - библиотека для стилизации CLI.
Shellingham [8] - библиотека для определения shell-оболочки в которой запущен файл Python.
typing-extensions [9] - библиотека, которая добавляет новые функции из 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 имеет немного другой вызов команды :D
Не имеет сторонних зависимостей кроме typing-extensions
Тогда в чем разница, если мы получаем одно и тоже? А разница в том мои дорогие читатели что Clite использует свой парсер команд, аргументов и флагов. Не базируется ни на каком Click, Typer. А просто использует практически всю мощь языка Python.
Из того что уже имеет Clite, это:
Парсинг команд, аргументов и флагов
Поддержка type hint-ов, сейчас простых по типу int, str и тд. но дальше будет больше
Декораторы подобные FastAPI, Flask, Typer, Click
Небольшая документация с референсами на код
На момент написания статьи Clite имеет версию 0.2.2.
В этом году планируется:
Улучшить парсер
Добавить поддержку Annotated для аргументов и флагов
Добавить поддержку sub-команд
Добавить свою реализацию echo
Также можно ознакомиться с roadmap [10]-ом в документации
Подписывайтесь на мой telegram-канал [11] - тут больше мыслей про разработку и жизнь в IT.
В конце хочу сказать "спасибо" Хабру и конкурсу от GitVerse, которые смотивировали меня рассказать о своем pet-проекте. Также если вы хотите внести свой вклад в развитие Clite, не постесняйтесь оставить свое Issue [12].
Автор: axeman-ofic
Источник [13]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/python/419844
Ссылки в тексте:
[1] «Сезон Open Source на Хабре»: https://habr.com/ru/specials/898552/
[2] Clite: https://github.com/axemanofic/clite
[3] CLI: https://en.wikipedia.org/wiki/Command-line_interface
[4] SQLite: https://www.sqlite.org/
[5] Typer: https://typer.tiangolo.com/
[6] Click: https://click.palletsprojects.com/en/stable/
[7] Rich: https://rich.readthedocs.io/en/stable/introduction.html
[8] Shellingham: https://github.com/sarugaku/shellingham
[9] typing-extensions: https://typing-extensions.readthedocs.io/en/latest/
[10] roadmap: https://axemanofic.github.io/clite/roadmap/
[11] telegram-канал: https://t.me/tired_developer_axe
[12] Issue: https://github.com/axemanofic/clite/issues
[13] Источник: https://habr.com/ru/articles/909824/?utm_source=habrahabr&utm_medium=rss&utm_campaign=909824
Нажмите здесь для печати.