You already saw how to add a help text for CLI arguments with the help parameter.
Let's now do the same for CLI options:
importtyperfromtyping_extensionsimportAnnotateddefmain(name:str,lastname:Annotated[str,typer.Option(help="Last name of person to greet.")]="",formal:Annotated[bool,typer.Option(help="Say hi formally.")]=False,):""" Say hi to NAME, optionally with a --lastname. If --formal is used, say hi very formally. """ifformal:print(f"Good day Ms. {name}{lastname}.")else:print(f"Hello {name}{lastname}")if__name__=="__main__":typer.run(main)
Tip
Prefer to use the Annotated version if possible.
importtyperdefmain(name:str,lastname:str=typer.Option("",help="Last name of person to greet."),formal:bool=typer.Option(False,help="Say hi formally."),):""" Say hi to NAME, optionally with a --lastname. If --formal is used, say hi very formally. """ifformal:print(f"Good day Ms. {name}{lastname}.")else:print(f"Hello {name}{lastname}")if__name__=="__main__":typer.run(main)
The same way as with typer.Argument(), we can put typer.Option() inside of Annotated.
We can then pass the help keyword parameter:
lastname:Annotated[str,typer.Option(help="this option does this and that")]=""
...to create the help for that CLI option.
The same way as with typer.Argument(), Typer also supports the old style using the function parameter default value:
lastname:str=typer.Option(default="",help="this option does this and that")
Copy that example from above to a file main.py.
Test it:
fast →python main.py --help Usage: main.py [OPTIONS] NAME
Say hi to NAME, optionally with a --lastname.
If --formal is used, say hi very formally.
Arguments: NAME [required]
Options: --lastname TEXT Last name of person to greet. [default: ] --formal / --no-formal Say hi formally. [default: False] --help Show this message and exit.
💬 Now you have a help text for the --lastname and --formal CLI options 🎉 restart ↻
The same as with CLI arguments, you can put the help for some CLI options in different panels to be shown with the --help option.
If you have installed Rich as described in the docs for Printing and Colors, you can set the rich_help_panel parameter to the name of the panel you want for each CLI option:
importtyperfromtyping_extensionsimportAnnotateddefmain(name:str,lastname:Annotated[str,typer.Option(help="Last name of person to greet.")]="",formal:Annotated[bool,typer.Option(help="Say hi formally.",rich_help_panel="Customization and Utils"),]=False,debug:Annotated[bool,typer.Option(help="Enable debugging.",rich_help_panel="Customization and Utils"),]=False,):""" Say hi to NAME, optionally with a --lastname. If --formal is used, say hi very formally. """ifformal:print(f"Good day Ms. {name}{lastname}.")else:print(f"Hello {name}{lastname}")if__name__=="__main__":typer.run(main)
Tip
Prefer to use the Annotated version if possible.
importtyperdefmain(name:str,lastname:str=typer.Option("",help="Last name of person to greet."),formal:bool=typer.Option(False,help="Say hi formally.",rich_help_panel="Customization and Utils"),debug:bool=typer.Option(False,help="Enable debugging.",rich_help_panel="Customization and Utils"),):""" Say hi to NAME, optionally with a --lastname. If --formal is used, say hi very formally. """ifformal:print(f"Good day Ms. {name}{lastname}.")else:print(f"Hello {name}{lastname}")if__name__=="__main__":typer.run(main)
Now, when you check the --help option, you will see a default panel named "Options" for the CLI options that don't have a custom rich_help_panel.
And below you will see other panels for the CLI options that have a custom panel set in the rich_help_panel parameter:
fast →python main.py --help Usage: main.py [OPTIONS] NAME Say hi to NAME, optionally with a --lastname. If --formal is used, say hi very formally.
╭─ Arguments ───────────────────────────────────────────────────────╮ │ * name TEXT [default: None] [required] │ ╰───────────────────────────────────────────────────────────────────╯ ╭─ Options ─────────────────────────────────────────────────────────╮ │ --lastnameTEXT Last name of person to greet. │ │ --help Show this message and exit. │ ╰───────────────────────────────────────────────────────────────────╯ ╭─ Customization and Utils ─────────────────────────────────────────╮ │ --formal--no-formal Say hi formally. │ │ [default: no-formal] │ │ --debug--no-debug Enable debugging. │ │ [default: no-debug] │ ╰───────────────────────────────────────────────────────────────────╯