Typer создаёт CLI из аннотаций типов Python. Никаких argparse, никакого ручного парсинга — только декораторы и типы.
Установка
uv add typer
Базовое приложение
import typer
app = typer.Typer()
@app.command()
def greet(name: str, times: int = 1):
"""Приветствует пользователя."""
for _ in range(times):
typer.echo(f"Привет, {name}!")
if __name__ == "__main__":
app()
uv run python main.py Alice # Привет, Alice!
uv run python main.py Alice --times 3 # Три раза
uv run python main.py --help # Автодокументация
Несколько команд
import typer
app = typer.Typer(help="AI-агент CLI")
@app.command()
def chat(message: str = typer.Argument(..., help="Сообщение для Claude")):
"""Отправить сообщение Claude."""
typer.echo(f"Отправляю: {message}")
@app.command()
def history(limit: int = typer.Option(10, help="Количество сообщений")):
"""Показать историю диалогов."""
typer.echo(f"Последние {limit} сообщений")
@app.command()
def clear():
"""Очистить историю."""
typer.echo("История очищена")
if __name__ == "__main__":
app()
uv run python main.py chat "Привет!"
uv run python main.py history --limit 5
uv run python main.py clear
Argument vs Option
@app.command()
def analyze(
text: str = typer.Argument(...), # обязательный позиционный
model: str = typer.Option("claude-sonnet-4-6"), # --model
verbose: bool = typer.Option(False, "--verbose", "-v"), # флаг
):
pass
Argument(...)— позиционный, обязательныйArgument("default")— позиционный с дефолтомOption(default)— именованный--param value
Цвета и форматирование
from rich.console import Console
console = Console()
@app.command()
def status():
console.print("[bold green]✓[/] Агент запущен")
console.print("[bold red]✗[/] Ошибка подключения")
typer.echo(typer.style("Готово", fg=typer.colors.GREEN, bold=True))
Интерактивный ввод
@app.command()
def setup():
api_key = typer.prompt("Введи API ключ", hide_input=True)
confirm = typer.confirm("Сохранить в .env?")
if confirm:
typer.echo("Сохранено!")
💬 Комментарии (0)
Комментариев пока нет
Станьте первым, кто поделится мнением об этой статье!