Typer,建造出色的 CLI。易於編碼。基於 Python 類型提示。
文件:https://typer.tiangolo.com
原始碼:https://github.com/fastapi/typer
Typer 是一個用於建立 CLI 應用程式的程式庫,使用者會喜歡使用它,開發人員也會喜歡創建它。基於 Python 類型提示。
它也是一個運行腳本的命令列工具,可自動將它們轉換為 CLI 應用程式。
主要特點是:
typer
命令/程序,您可以使用它來運行腳本,自動將它們轉換為 CLI,即使它們內部不使用 Typer。 Typer是 FastAPI 的小兄弟,它是 CLI 中的 FastAPI。
建立並啟動虛擬環境,然後安裝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
對於檔案、路徑、枚舉(選擇)等也類似。
您將獲得:出色的編輯器支持,包括無處不在的完成和類型檢查。
當您的使用者安裝您的軟體包或使用typer
指令時,您的使用者將獲得:自動--help
、在終端機(Bash、Zsh、Fish、PowerShell)中自動完成的功能。
有關包含更多功能的更完整範例,請參閱教學 - 使用者指南。
Typer站在巨人的肩膀上。它唯一需要的內部相依性是 Click。
預設情況下,它還附帶額外的標準依賴項:
rich
:自動顯示格式良好的錯誤。shellingham
:安裝完成時自動偵測目前shell。shellingham
你可以只使用--install-completion
。shellingham
,您必須傳遞 shell 的名稱來安裝完成,例如--install-completion bash
。typer-slim
如果您不需要額外的標準可選依賴項,請安裝typer-slim
。
當您安裝時:
pip install typer
....它包含相同的程式碼和依賴項:
pip install " typer-slim[standard] "
standard
額外依賴項是rich
和shellingham
。
注意: typer
指令僅包含在typer
套件中。
該項目根據 MIT 許可證條款獲得許可。