Typer さん、素晴らしい CLI を構築してください。コーディングが簡単。 Python の型ヒントに基づいています。
ドキュメント: https://typer.tiangolo.com
ソースコード: https://github.com/fastapi/typer
Typer は、ユーザーが使いやすく、開発者が作成したいCLI アプリケーションを構築するためのライブラリです。 Python の型ヒントに基づいています。
また、スクリプトを実行し、スクリプトを CLI アプリケーションに自動的に変換するコマンド ライン ツールでもあります。
主な機能は次のとおりです。
typer
コマンド/プログラムが含まれており、内部で Typer を使用していない場合でもスクリプトを自動的に CLI に変換します。 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()
アプリを作成し、パラメーターを含む 2 つのサブコマンドを作成します。
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()
を使用して 2 つのサブコマンドを追加します。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 オプション) を関数パラメーターとして1 回宣言します。
これは、標準的な最新の Python 型を使用して行います。
新しい構文、特定のライブラリのメソッドやクラスなどを学ぶ必要はありません。
まさに標準的なPythonです。
たとえば、 int
の場合:
total : int
またはbool
フラグの場合:
force : bool
また、ファイル、パス、列挙型(選択肢) などについても同様です。また、サブコマンドのグループを作成したり、メタデータを追加したり、追加の検証を行ったりするためのツールもあります。
あらゆる場所での補完や型チェックなど、優れたエディターのサポートが得られます。
ユーザーは、パッケージをインストールするとき、またはtyper
コマンドを使用するときに、ターミナル (Bash、Zsh、Fish、PowerShell) で自動--help
、オートコンプリートを取得します。
より多くの機能を含むより完全な例については、「チュートリアル - ユーザー ガイド」を参照してください。
タイパーは巨人の肩の上に立っています。内部的に必要な依存関係は 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 ライセンスの条件に基づいてライセンスされています。