Typer для Cli в Python - это

Tags:

Published 12 августа 2025 г. 22:11 by max_summer

Typer — это библиотека для создания CLI (Command Line Interface) приложений на Python, разработанная Sebastián Ramírez (автором FastAPI). Она построена поверх Click, но предоставляет более простой и интуитивный синтаксис с использованием типовых аннотаций Python (type hints).

🔹 Основные особенности Typer:

  1. Простота использования – минимальный boilerplate-код.
  2. Автоматическая генерация справки (--help).
  3. Поддержка вложенных команд (как в git commit, git push).
  4. Валидация аргументов на основе типовых аннотаций.
  5. Интеграция с Click (можно использовать расширения Click).
  6. Поддержка асинхронных функций (async/await).
  7. Автоматическое преобразование типов (например, int, float, bool, Path и т. д.).
  8. Поддержка цветного вывода (через rich или click).

🔹 Пример простого CLI с Typer

```python import typer

app = typer.Typer()

@app.command() def greet(name: str, age: int = 0): """Приветствует пользователя.""" if age > 0: typer.echo(f"Привет, {name}! Тебе {age} лет.") else: typer.echo(f"Привет, {name}!")

@app.command() def goodbye(name: str, formal: bool = False): """Прощается с пользователем.""" if formal: typer.echo(f"До свидания, господин {name}.") else: typer.echo(f"Пока, {name}!")

if name == "main": app() ```

Запуск:

```bash python script.py greet --name Алия --age 25

Вывод: Привет, Алия! Тебе 25 лет.

python script.py goodbye --name Иван --formal

Вывод: До свидания, господин Иван.

```


🔹 Установка

bash pip install typer (Если нужны дополнительные фичи, например, цветной вывод через rich): bash pip install typer[all]


🔹 Продвинутые возможности

1. Вложенные команды (подкоманды)

```python user_app = typer.Typer()

@user_app.command() def create(username: str): typer.echo(f"Создан пользователь: {username}")

@user_app.command() def delete(username: str): typer.echo(f"Удалён пользователь: {username}")

app = typer.Typer() app.add_typer(user_app, name="user")

Запуск:

python script.py user create --username admin

python script.py user delete --username guest

```

2. Аргументы из файла (JSON/YAML)

```python import json from pathlib import Path

@app.command() def load_config(config_path: Path): config = json.loads(config_path.read_text()) typer.echo(f"Загружен конфиг: {config}") ```

3. Асинхронные команды

```python import asyncio

@app.command() async def fetch_data(url: str): typer.echo(f"Загружаю данные с {url}...") await asyncio.sleep(1) typer.echo("Данные загружены!") ```

4. Кастомизация справки (--help)

python @app.callback() def callback(): """Мое супер CLI-приложение.""" pass


🔹 Сравнение с другими библиотеками

| Библиотека | Простота | Типизация | Вложенные команды | Асинхронность | |------------|----------|-----------|--------------------|---------------| | Typer | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | | Click | ⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | | Argparse | ⭐⭐ | ⭐ | ⭐⭐ | ❌ | | Fire | ⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐ | ❌ |


🔹 Когда использовать Typer?

✅ Нужно быстро создать CLI с минимальным кодом. ✅ Хочется использовать типовые аннотации Python. ✅ Нужны вложенные команды (как в git, docker). ✅ Требуется асинхронная поддержка.

❌ Если нужна максимальная кастомизация (лучше Click). ❌ Если проект уже использует Argparse и не хочется мигрировать.


🔹 Заключение

Typer — это отличный выбор для создания современных CLI-приложений на Python с минимальными усилиями. Он сочетает простоту Click и удобство типовых аннотаций, что делает код чище и понятнее.

📌 Документация: https://typer.tiangolo.com/

Share this post

Similar posts

There are no similar posts yet.

0 comments

There are no comments

Add a new comment