Typer: Найпростіший спосіб створення інструментів командного рядка

pic

Командні інструменти (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.
Залишайтеся з нами, щоб отримувати більше корисного контенту!

👍🏻 Лайк 🔗 поділіться та 👉🏻 підпишіться, щоб дізнаватися більше.

Зв'яжіться зі мною:

Linkedin, GitHub

Продовжуйте навчання

  • Докладніше про Typer
  • Приклад застосунку з використанням Typer

Перекладено з: Typer: The Easiest Way to Build Command-Line Tools

Leave a Reply

Your email address will not be published. Required fields are marked *