Командні інструменти (Command-line tools) є основою автоматизації та продуктивності для розробників. Але створення таких інструментів часто сприймається як обтяжливе завдання.
Знайомтеся з Typer: сучасною бібліотекою Python, яка робить створення інтерфейсів командного рядка (CLI) простим, інтуїтивним і потужним.
У цьому блозі ми детально розглянемо Typer: від першого знайомства до просунутих функцій, порівняння з альтернативами та інтеграції у реальних проєктах. У результаті ви будете готові легко створювати надійні CLI.
Зміст
· Що таке Typer?
· Чому Typer?
· Початок роботи
· Огляд функцій Typer
· 1. Автоматично створювана допомога та документація
· 2. Додавання опцій
· 3. Додатки з багатьма командами
· 4. Підтримка Async
· 5. Вкладені команди
· Typer проти альтернатив
· Інтеграція Typer з іншими інструментами
· 1. Typer + FastAPI
· 2. Typer + Rich
· Висновок
Що таке Typer?
У своїй основі Typer є бібліотекою, побудованою на базі Click, яка використовує підказки типів Python, щоб спростити створення CLI. Вона автоматизує завдання, як-от розбір аргументів, створення повідомлень допомоги та перевірку вводу, залишаючи ваш код чистим і мінімалістичним.
Чому Typer?
- Типобезпечність (Type-Safe): Забезпечує відповідність аргументів очікуваним типам за допомогою підказок типів Python.
- Автоматична допомога: Професійні повідомлення допомоги без додаткового коду.
- Дружність до початківців: Простий синтаксис, що підходить для розробників будь-якого рівня.
- Функціональність: Підтримка таких можливостей, як асинхронні функції, підкоманди тощо.
- Продуктивність: Зосередьтеся на логіці вашого інструмента, а не на шаблонному коді.
Давайте розглянемо, як це працює на практиці.
Початок роботи
Спочатку встановіть Typer за допомогою pip:
pip install typer
Створіть Python-скрипт з назвою app.py
із наступним кодом:
import typer
def greet(name: str):
typer.echo(f"Hello, {name}!")
if __name__ == "__main__":
typer.run(greet)
Запустіть скрипт у терміналі:
python app.py John
Вивід:
Hello, John!
Що сталося?
- Функція
greet
приймає аргументname
типуstr
. - Метод
run
із Typer перетворює цю функцію на CLI. - Підказки типів Python визначають структуру вводу та перевіряють його.
Огляд функцій Typer
1. Автоматично створювана допомога та документація
Typer автоматично генерує повідомлення допомоги на основі підписів ваших функцій.
Виконайте команду:
python app.py --help
Вивід:
Usage: app.py [OPTIONS] NAME
Arguments:
NAME [required]Options:
--help Show this message and exit.
Жоден додатковий код не потрібен — ваш CLI відразу зручний для користувачів.
2. Додавання опцій
Опції дозволяють користувачам надавати додаткові дані без обов'язковості.
import typer
def greet(name: str, age: int = typer.Option(0, help="Ваш вік")):
typer.echo(f"Привіт {name}, вам {age} років!")
if __name__ == "__main__":
typer.run(greet)
Запустіть це:
python app.py John --age 30
Вивід:
Привіт John, вам 30 років!
Основні моменти:
- Опції визначаються за допомогою
typer.Option
і можуть включати текст допомоги. - Значення за замовчуванням застосовується автоматично, якщо опція не вказана.
3.
Додатки з багатьма командами
Створення інструментів із декількома командами стає простим за допомогою об'єкта Typer()
у Typer.
import typer
app = typer.Typer()
@app.command()
def add(x: int, y: int):
typer.echo(f"The sum is {x + y}")
@app.command()
def multiply(x: int, y: int):
typer.echo(f"The product is {x * y}")
if __name__ == "__main__":
app()
Запустіть ці команди:
python app.py add 3 5
# Вивід: The sum is 8
python app.py multiply 3 5
# Вивід: The product is 15
Що відбувається?
@app.command()
реєструє кожну функцію як команду CLI.- Typer логічно організовує команди для багатофункціональних інструментів.
Підтримка Async
Typer підтримує асинхронні функції, що робить його ідеальним для робочих процесів із великим обсягом вводу/виводу.
import typer
import asyncio
async def download(url: str):
await asyncio.sleep(2)
typer.echo(f"Downloaded {url}")
if __name__ == "__main__":
typer.run(download)
Запустіть це:
python app.py https://example.com
Вивід:
Downloaded https://example.com
Вкладені команди
Організовуйте пов'язані команди в групи за допомогою вкладених CLI.
import typer
app = typer.Typer()
users_app = typer.Typer()
@app.command()
def main():
typer.echo("Main app")
@users_app.command()
def create(name: str):
typer.echo(f"User {name} created!")
@users_app.command()
def delete(name: str):
typer.echo(f"User {name} deleted!")
app.add_typer(users_app, name="users")
if __name__ == "__main__":
app()
Запустіть ці команди:
python app.py users create Alice
# Вивід: User Alice created!
python app.py users delete Alice
# Вивід: User Alice deleted!
Typer проти альтернатив
| Особливість | Typer | Click | Argparse |
|----------------------|-------|----------|----------|
| Підтримка підказок типів | ✓ | ✘ | ✘ |
| | | | |
| Автоматична генерація допомоги | ✓ | ✓ | ✘ |
| | | | |
| Підтримка Async | ✓ | ✘ | ✘ |
| | | | |
| Крива навчання | Легка | Середня | Стрімка |
| | | | |
Typer поєднує простоту Argparse із потужністю Click, пропонуючи сучасну альтернативу для створення CLI.
Інтеграція Typer з іншими інструментами
1. Typer + FastAPI
FastAPI і Typer мають спільну філософію дизайну, що робить їх ідеальними партнерами. Використовуйте Typer для команд управління у вашому проєкті FastAPI.
import typer
app = typer.Typer()
@app.command()
def runserver():
typer.echo("Starting FastAPI server...")
# Код для запуску сервера FastAPI
if __name__ == "__main__":
app()
2. Typer + Rich
Покращуйте вивід вашого CLI за допомогою бібліотеки Rich для кольорового та форматованого тексту.
from rich.console import Console
import typer
console = Console()
@app.command()
def greet(name: str):
console.print(f"[bold green]Hello, {name}![/bold green]")
if __name__ == "__main__":
typer.run(greet)
Висновок
Typer революціонізує розробку CLI, поєднуючи простоту, потужність і сучасні можливості Python. Від автоматично створюваних повідомлень допомоги до просунутих функцій, таких як підтримка async та вкладені команди, Typer бере на себе складну роботу, дозволяючи вам зосередитися на створенні чудових інструментів.
Чи то автоматизація завдань, чи створення інструментів для розробників, чи управління проєктами — Typer є вашим ідеальним інструментом для створення CLI професійного рівня. Готові розпочати? Встановіть Typer вже сьогодні та відчуйте магію!
Успішного кодування! 💻
Якщо цей блог був для вас корисним, не соромтеся поставити лайк, залишити коментар та поділитися ним зі своєю мережею. Ви також можете зв’язатися зі мною для обговорення, запитань або вивчення інших тем, пов’язаних із Python, Django, React і JavaScript.
Залишайтеся з нами, щоб отримувати більше корисного контенту!
👍🏻 Лайк 🔗 поділіться та 👉🏻 підпишіться, щоб дізнаватися більше.
Зв'яжіться зі мною:
Продовжуйте навчання
Перекладено з: Typer: The Easiest Way to Build Command-Line Tools