Typer, erstelle großartige CLIs. Einfach zu codieren. Basierend auf Python-Typhinweisen.
Dokumentation : https://typer.tiangolo.com
Quellcode : https://github.com/fastapi/typer
Typer ist eine Bibliothek zum Erstellen von CLI-Anwendungen, die Benutzer gerne verwenden und Entwickler gerne erstellen werden . Basierend auf Python-Typhinweisen.
Es handelt sich außerdem um ein Befehlszeilentool zum Ausführen von Skripts, das diese automatisch in CLI-Anwendungen konvertiert.
Die Hauptmerkmale sind:
typer
-Befehl/ein Typer-Programm, mit dem Sie Skripte ausführen und diese automatisch in CLIs konvertieren können, auch wenn Typer intern nicht verwendet wird. Typer ist der kleine Bruder von FastAPI, es ist das FastAPI der CLIs.
Erstellen und aktivieren Sie eine virtuelle Umgebung und installieren Sie dann Typer :
$ pip install typer
---> 100%
Successfully installed typer rich shellingham
main.py
mit: def main ( name : str ):
print ( f"Hello { name } " )
Dieses Skript verwendet Typer nicht einmal intern. Sie können es jedoch mit dem Befehl typer
als CLI-Anwendung ausführen.
Führen Sie Ihre Anwendung mit dem Befehl typer
aus:
// 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! ?
Dies ist der einfachste Anwendungsfall, bei dem Typer nicht einmal intern verwendet wird, aber für einfache Skripte kann er bereits sehr nützlich sein.
Hinweis : Die automatische Vervollständigung funktioniert, wenn Sie ein Python-Paket erstellen und es mit --install-completion
ausführen oder wenn Sie den Befehl typer
verwenden.
Beginnen wir nun mit der Verwendung von Typer in Ihrem eigenen Code und aktualisieren Sie main.py
mit:
import typer
def main ( name : str ):
print ( f"Hello { name } " )
if __name__ == "__main__" :
typer . run ( main )
Jetzt können Sie es direkt mit Python ausführen:
// 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! ?
Hinweis : Sie können dasselbe Skript auch mit dem Befehl typer
aufrufen, müssen dies aber nicht.
Dies war das einfachste Beispiel, das möglich war.
Sehen wir uns nun einen etwas komplexeren Fall an.
Ändern Sie die Datei main.py
.
Erstellen Sie eine typer.Typer()
App und erstellen Sie zwei Unterbefehle mit ihren Parametern.
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 ()
Und das wird:
typer.Typer
-App.typer.run
erstellt tatsächlich implizit einen für Sie.@app.command()
hinzu.app()
selbst aus, als wäre es eine Funktion (anstelle von typer.run
).Sehen Sie sich die neue Hilfe an:
$ 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
Schauen Sie sich nun die Hilfe zum Befehl hello
an:
$ python main.py hello --help
Usage: main.py hello [OPTIONS] NAME
╭─ Arguments ───────────────────────────────────────╮
│ * name TEXT [default: None] [required] │
╰───────────────────────────────────────────────────╯
╭─ Options ─────────────────────────────────────────╮
│ --help Show this message and exit. │
╰───────────────────────────────────────────────────╯
Und jetzt schauen Sie sich die Hilfe für den Befehl goodbye
an:
$ 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 ?
Jetzt können Sie die neue Kommandozeilenanwendung ausprobieren:
// 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.
Zusammenfassend deklarieren Sie einmal die Parametertypen ( CLI-Argumente und CLI-Optionen ) als Funktionsparameter.
Sie tun dies mit modernen Standard-Python-Typen.
Sie müssen keine neue Syntax, die Methoden oder Klassen einer bestimmten Bibliothek usw. lernen.
Nur Standard -Python .
Zum Beispiel für ein int
:
total : int
oder für ein bool
-Flag:
force : bool
Und das Gleiche gilt für Dateien , Pfade , Aufzählungen (Auswahlmöglichkeiten) usw. Und es gibt Tools zum Erstellen von Gruppen von Unterbefehlen , zum Hinzufügen von Metadaten, für zusätzliche Validierungen usw.
Sie erhalten : hervorragende Editorunterstützung, einschließlich Vervollständigungs- und Typprüfungen überall.
Ihre Benutzer erhalten : automatische --help
, automatische Vervollständigung in ihrem Terminal (Bash, Zsh, Fish, PowerShell), wenn sie Ihr Paket installieren oder den typer
-Befehl verwenden.
Ein ausführlicheres Beispiel mit weiteren Funktionen finden Sie im Tutorial – Benutzerhandbuch.
Typer steht auf den Schultern eines Riesen. Die einzige intern erforderliche Abhängigkeit ist Click.
Standardmäßig sind auch zusätzliche Standardabhängigkeiten enthalten:
rich
: um schön formatierte Fehler automatisch anzuzeigen.shellingham
: um die aktuelle Shell nach Abschluss der Installation automatisch zu erkennen.shellingham
können Sie einfach --install-completion
verwenden.shellingham
müssen Sie den Namen der Shell übergeben, für die die Installation abgeschlossen werden soll, z. B. --install-completion bash
.typer-slim
Wenn Sie die zusätzlichen standardmäßigen optionalen Abhängigkeiten nicht möchten, installieren Sie stattdessen typer-slim
.
Bei der Installation mit:
pip install typer
...es enthält den gleichen Code und die gleichen Abhängigkeiten wie:
pip install " typer-slim[standard] "
Die standard
zusätzlichen Abhängigkeiten sind rich
und shellingham
.
Hinweis : Der typer
-Befehl ist nur im typer
Paket enthalten.
Dieses Projekt ist unter den Bedingungen der MIT-Lizenz lizenziert.