Typer, buat CLI yang bagus. Mudah untuk dikodekan. Berdasarkan petunjuk tipe Python.
Dokumentasi : https://typer.tiangolo.com
Kode Sumber : https://github.com/fastapi/typer
Typer adalah perpustakaan untuk membangun aplikasi CLI yang akan disukai pengguna dan pengembang akan senang membuatnya . Berdasarkan petunjuk tipe Python.
Ini juga merupakan alat baris perintah untuk menjalankan skrip, secara otomatis mengubahnya menjadi aplikasi CLI.
Fitur utamanya adalah:
typer
yang dapat Anda gunakan untuk menjalankan skrip, secara otomatis mengonversinya menjadi CLI, meskipun skrip tersebut tidak menggunakan Typer secara internal. Typer adalah adik dari FastAPI, ini adalah FastAPI dari CLI.
Buat dan aktifkan lingkungan virtual lalu instal Typer :
$ pip install typer
---> 100%
Successfully installed typer rich shellingham
main.py
dengan: def main ( name : str ):
print ( f"Hello { name } " )
Skrip ini bahkan tidak menggunakan Typer secara internal. Namun Anda dapat menggunakan perintah typer
untuk menjalankannya sebagai aplikasi CLI.
Jalankan aplikasi Anda dengan perintah 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! ?
Ini adalah kasus penggunaan yang paling sederhana, bahkan tidak menggunakan Typer secara internal, namun sudah bisa sangat berguna untuk skrip sederhana.
Catatan : pelengkapan otomatis berfungsi saat Anda membuat paket Python dan menjalankannya dengan --install-completion
atau saat Anda menggunakan perintah typer
.
Sekarang mari mulai menggunakan Typer dalam kode Anda sendiri, perbarui main.py
dengan:
import typer
def main ( name : str ):
print ( f"Hello { name } " )
if __name__ == "__main__" :
typer . run ( main )
Sekarang Anda bisa menjalankannya dengan Python secara langsung:
// 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! ?
Catatan : Anda juga dapat memanggil skrip yang sama dengan perintah typer
, tetapi Anda tidak perlu melakukannya.
Ini adalah contoh paling sederhana.
Sekarang mari kita lihat yang lebih rumit.
Ubah file main.py
.
Buat aplikasi typer.Typer()
, dan buat dua subperintah dengan parameternya.
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 ()
Dan itu akan:
typer.Typer
secara eksplisit.typer.run
sebelumnya sebenarnya membuatnya secara implisit untuk Anda.@app.command()
.app()
itu sendiri, seolah-olah itu adalah sebuah fungsi (bukan typer.run
).Periksa bantuan baru:
$ 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
Sekarang periksa bantuan untuk perintah 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. │
╰───────────────────────────────────────────────────╯
Dan sekarang periksa bantuan untuk perintah 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 ?
Sekarang Anda dapat mencoba aplikasi baris perintah baru:
// 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.
Singkatnya , Anda mendeklarasikan jenis parameter ( argumen CLI dan opsi CLI ) sebagai parameter fungsi.
Anda melakukannya dengan tipe Python modern standar.
Anda tidak perlu mempelajari sintaks baru, metode atau kelas perpustakaan tertentu, dll.
Hanya Python standar.
Misalnya, untuk int
:
total : int
atau untuk bendera bool
:
force : bool
Demikian pula untuk file , jalur , enum (pilihan), dll. Dan ada alat untuk membuat grup subperintah , menambahkan metadata, validasi tambahan, dll.
Anda mendapatkan : dukungan editor yang luar biasa, termasuk penyelesaian dan pemeriksaan ketik di mana saja.
Pengguna Anda mendapatkan : automatic --help
, pelengkapan otomatis di terminal mereka (Bash, Zsh, Fish, PowerShell) saat mereka menginstal paket Anda atau saat menggunakan perintah typer
.
Untuk contoh lebih lengkap termasuk fitur lainnya, lihat Tutorial - Panduan Pengguna.
Typer berdiri di atas bahu raksasa. Satu-satunya ketergantungan internal yang diperlukan adalah Klik.
Secara default, ini juga dilengkapi dengan dependensi standar tambahan:
rich
: untuk menampilkan kesalahan yang diformat dengan baik secara otomatis.shellingham
: untuk secara otomatis mendeteksi shell saat ini ketika instalasi selesai.shellingham
Anda cukup menggunakan --install-completion
.shellingham
, Anda harus memberikan nama shell untuk penyelesaian instalasi, misalnya --install-completion bash
.typer-slim
Jika Anda tidak menginginkan dependensi opsional standar tambahan, instal typer-slim
saja.
Saat Anda menginstal dengan:
pip install typer
...itu mencakup kode dan dependensi yang sama seperti:
pip install " typer-slim[standard] "
Ketergantungan ekstra standard
adalah rich
dan shellingham
.
Catatan : Perintah typer
hanya disertakan dalam paket typer
.
Proyek ini dilisensikan berdasarkan ketentuan lisensi MIT.