Yapx
The next generation of Python's Argparse.
Documentation | Slide Deck | Git Repo
Yapx is "Yeah, Another Argparse eXtension", a Python library for creating tools with type-safe command-line interfaces (CLIs) -- and even textual user interfaces (TUIs) -- by analyzing type-hints of functions and dataclasses.
Yeah, Another?
I intended to publish this package as simply apx
, but PyPi didn't allow it, so I tacked on the y to make *yapx
*. The nomenclature "Yet Another" seems demeaning considering what this package is capable of.
So, Yeah, Another Argparse eXtension
Think about the repetitive steps involved in creating a command-line application.
- Define function(s).
- Define the command-line interface; i.e., build the
ArgumentParser
. - Parse arguments.
- Call the appropriate function(s).
For example:
from argparse import ArgumentParser
# 1. Define function(s).
def say_hello(name: str = 'World'):
print(f"Hello {name}")
# 2. Define the command-line interface.
parser = ArgumentParser()
parser.add_argument("--name", default="World")
# 3. Parse arguments.
parsed_args = parser.parse_args()
# 4. Call the appropriate function(s).
say_hello(name=parsed_args.name)
Yapx combines these steps into one:
import yapx
def say_hello(name: str = 'World'):
print(f"Hello {name}")
yapx.run(say_hello)
Yapx is a superset of Python's native Argparse ArgumentParser
, so you can make use of the high-level abstractions or do the low-level work you're familiar with. Either way, Yapx provides benefits including:
- Type-casting and validation, with or without Pydantic.
- Automatic addition of "helpful" arguments, including
--help
,--help-all
,--version
, and most impressively--tui
. - Prettier help and error messages.
- Command-line autocompletion scripts.
Yapx is among several modern Python CLI frameworks, including Typer and Fire. Distinguishing characteristics of Yapx include:
- No 3rd-party dependencies required (but can be opted into)
- Type-safe argument validation
- Infinitely-nested commands
- Display your CLI as a TUI
- Handling of unknown arguments using
*args
and**kwargs
- Most intuitive
- Least documented
I'd appreciate a more analytical comparison between Yapx and the array of Python CLI frameworks, but that's too ambitious of a goal right now
Install¶
pip install 'yapx[extras]'
Or, to install without 3rd-party dependencies:
pip install yapx