Typer для Cli в Python - это
Published 12 августа 2025 г. 22:11 by max_summer
Typer — это библиотека для создания CLI (Command Line Interface) приложений на Python, разработанная Sebastián Ramírez (автором FastAPI). Она построена поверх Click, но предоставляет более простой и интуитивный синтаксис с использованием типовых аннотаций Python (type hints).
🔹 Основные особенности Typer:
- Простота использования – минимальный boilerplate-код.
- Автоматическая генерация справки (
--help
). - Поддержка вложенных команд (как в
git commit
,git push
). - Валидация аргументов на основе типовых аннотаций.
- Интеграция с
Click
(можно использовать расширения Click). - Поддержка асинхронных функций (
async/await
). - Автоматическое преобразование типов (например,
int
,float
,bool
,Path
и т. д.). - Поддержка цветного вывода (через
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/
Similar posts
There are no similar posts yet.
0 comments
There are no comments