Typer สร้าง CLI ที่ยอดเยี่ยม ง่ายต่อการเขียนโค้ด ตามคำแนะนำประเภท 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
และในทำนองเดียวกันสำหรับ files , paths , enums (choices) ฯลฯ และมีเครื่องมือสำหรับสร้าง กลุ่มของคำสั่งย่อย เพิ่ม metadata การตรวจสอบ เพิ่มเติม ฯลฯ
คุณจะได้รับ : การสนับสนุนตัวแก้ไขที่ยอดเยี่ยม รวมถึงการตรวจสอบ ความสมบูรณ์ และ การพิมพ์ ทุกที่
ผู้ใช้ของคุณจะได้รับ : automatic --help
, auto-completion ในเทอร์มินัล (Bash, Zsh, Fish, PowerShell) เมื่อพวกเขาติดตั้งแพ็คเกจของคุณหรือเมื่อใช้คำสั่ง typer
หากต้องการตัวอย่างที่สมบูรณ์ยิ่งขึ้นรวมถึงคุณสมบัติเพิ่มเติม โปรดดูบทช่วยสอน - คู่มือผู้ใช้
ไทเกอร์ ยืนอยู่บนไหล่ของยักษ์ การพึ่งพาภายในที่จำเป็นเพียงอย่างเดียวคือคลิก
โดยค่าเริ่มต้นมันยังมาพร้อมกับการขึ้นต่อกันแบบมาตรฐานเพิ่มเติม:
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