Typer, создавайте отличные интерфейсы командной строки. Легко кодировать. На основе подсказок типов Python.
Документация : https://typer.tiangolo.com.
Исходный код : https://github.com/fastapi/typer.
Typer — это библиотека для создания приложений CLI, которую пользователи будут любить использовать , а разработчики — создавать . На основе подсказок типов Python.
Это также инструмент командной строки для запуска сценариев, автоматически преобразующий их в приложения CLI.
Ключевые особенности:
typer
, которую можно использовать для запуска сценариев, автоматически преобразуя их в CLI, даже если они не используют Typer внутри себя. Typer — это младший брат FastAPI, это FastAPI для CLI.
Создайте и активируйте виртуальную среду, а затем установите Typer :
$ pip install typer
---> 100%
Successfully installed typer rich shellingham
main.py
с помощью: def main ( name : str ):
print ( f"Hello { name } " )
Этот скрипт даже не использует Typer внутри себя. Но вы можете использовать команду typer
для запуска его как приложения CLI.
Запустите приложение с помощью команды typer
:
// Run your application
$ typer main.py run
// You get a nice error, you are missing NAME
Usage: typer [PATH_OR_MODULE] run [OPTIONS] NAME
Try 'typer [PATH_OR_MODULE] run --help' for help.
╭─ Error ───────────────────────────────────────────╮
│ Missing argument 'NAME'. │
╰───────────────────────────────────────────────────╯
// You get a --help for free
$ typer main.py run --help
Usage: typer [PATH_OR_MODULE] run [OPTIONS] NAME
Run the provided Typer app.
╭─ Arguments ───────────────────────────────────────╮
│ * name TEXT [default: None] [required] |
╰───────────────────────────────────────────────────╯
╭─ Options ─────────────────────────────────────────╮
│ --help Show this message and exit. │
╰───────────────────────────────────────────────────╯
// Now pass the NAME argument
$ typer main.py run Camila
Hello Camila
// It works! ?
Это самый простой вариант использования, даже без внутреннего использования Typer, но он уже может быть весьма полезен для простых скриптов.
Примечание . Автодополнение работает, когда вы создаете пакет Python и запускаете его с помощью --install-completion
или когда вы используете команду typer
.
Теперь давайте начнем использовать Typer в вашем собственном коде, обновив main.py
с помощью:
import typer
def main ( name : str ):
print ( f"Hello { name } " )
if __name__ == "__main__" :
typer . run ( main )
Теперь вы можете запустить его напрямую с Python:
// Run your application
$ python main.py
// You get a nice error, you are missing NAME
Usage: main.py [OPTIONS] NAME
Try 'main.py --help' for help.
╭─ Error ───────────────────────────────────────────╮
│ Missing argument 'NAME'. │
╰───────────────────────────────────────────────────╯
// You get a --help for free
$ python main.py --help
Usage: main.py [OPTIONS] NAME
╭─ Arguments ───────────────────────────────────────╮
│ * name TEXT [default: None] [required] |
╰───────────────────────────────────────────────────╯
╭─ Options ─────────────────────────────────────────╮
│ --help Show this message and exit. │
╰───────────────────────────────────────────────────╯
// Now pass the NAME argument
$ python main.py Camila
Hello Camila
// It works! ?
Примечание : вы также можете вызвать этот же сценарий с помощью команды typer
, но это не обязательно.
Это был самый простой пример.
Теперь давайте посмотрим на более сложную задачу.
Измените файл main.py
Создайте приложение typer.Typer()
и создайте две подкоманды с их параметрами.
import typer
app = typer . Typer ()
@ app . command ()
def hello ( name : str ):
print ( f"Hello { name } " )
@ app . command ()
def goodbye ( name : str , formal : bool = False ):
if formal :
print ( f"Goodbye Ms. { name } . Have a good day." )
else :
print ( f"Bye { name } !" )
if __name__ == "__main__" :
app ()
И это будет:
typer.Typer
.typer.run
фактически создает его неявно.@app.command()
.app()
, как если бы это была функция (вместо typer.run
).Ознакомьтесь с новой справкой:
$ python main.py --help
Usage: main.py [OPTIONS] COMMAND [ARGS]...
╭─ Options ─────────────────────────────────────────╮
│ --install-completion Install completion │
│ for the current │
│ shell. │
│ --show-completion Show completion for │
│ the current shell, │
│ to copy it or │
│ customize the │
│ installation. │
│ --help Show this message │
│ and exit. │
╰───────────────────────────────────────────────────╯
╭─ Commands ────────────────────────────────────────╮
│ goodbye │
│ hello │
╰───────────────────────────────────────────────────╯
// When you create a package you get auto-completion for free, installed with --install-completion
// You have 2 subcommands (the 2 functions): goodbye and hello
Теперь проверьте справку по команде hello
:
$ python main.py hello --help
Usage: main.py hello [OPTIONS] NAME
╭─ Arguments ───────────────────────────────────────╮
│ * name TEXT [default: None] [required] │
╰───────────────────────────────────────────────────╯
╭─ Options ─────────────────────────────────────────╮
│ --help Show this message and exit. │
╰───────────────────────────────────────────────────╯
А теперь проверьте справку по команде goodbye
:
$ python main.py goodbye --help
Usage: main.py goodbye [OPTIONS] NAME
╭─ Arguments ───────────────────────────────────────╮
│ * name TEXT [default: None] [required] │
╰───────────────────────────────────────────────────╯
╭─ Options ─────────────────────────────────────────╮
│ --formal --no-formal [default: no-formal] │
│ --help Show this message │
│ and exit. │
╰───────────────────────────────────────────────────╯
// Automatic --formal and --no-formal for the bool option ?
Теперь вы можете опробовать новое приложение командной строки:
// Use it with the hello command
$ python main.py hello Camila
Hello Camila
// And with the goodbye command
$ python main.py goodbye Camila
Bye Camila!
// And with --formal
$ python main.py goodbye --formal Camila
Goodbye Ms. Camila. Have a good day.
Таким образом, вы один раз объявляете типы параметров ( аргументы CLI и параметры CLI ) как параметры функции.
Вы делаете это со стандартными современными типами Python.
Вам не нужно изучать новый синтаксис, методы или классы конкретной библиотеки и т. д.
Просто стандартный Python .
Например, для int
:
total : int
или для bool
флага:
force : bool
И аналогично для файлов , путей , перечислений (выборов) и т. д. И есть инструменты для создания групп подкоманд , добавления метаданных, дополнительной проверки и т. д.
Вы получаете : отличную поддержку редактора, включая проверку завершения и типа везде.
Ваши пользователи получают : автоматическое --help
, автозаполнение в своем терминале (Bash, Zsh, Fish, PowerShell) при установке вашего пакета или при использовании команды typer
.
Более полный пример, включающий дополнительные функции, см. в Учебное пособие — Руководство пользователя.
Тайпер стоит на плечах гиганта. Его единственная внутренняя обязательная зависимость — Click.
По умолчанию он также поставляется с дополнительными стандартными зависимостями:
rich
: автоматически отображать красиво отформатированные ошибки.shellingham
: для автоматического определения текущей оболочки при завершении установки.shellingham
вы можете просто использовать --install-completion
.shellingham
вам необходимо передать имя оболочки для завершения установки, например --install-completion bash
.typer-slim
Если вам не нужны дополнительные стандартные необязательные зависимости, вместо этого установите typer-slim
.
При установке с помощью:
pip install typer
... он включает в себя тот же код и зависимости, что и:
pip install " typer-slim[standard] "
standard
дополнительные зависимости rich
и shellingham
.
Примечание . Команда typer
включена только в пакет typer
.
Этот проект лицензируется на условиях лицензии MIT.