Strongly typed, zero-effort CLI interfaces
Project description
Documentation
•
pip install tyro
tyro
is a library for building CLI interfaces,
configuration objects, and configuration systems with modern, type-annotated
Python.
Our core interface consists of just one function, tyro.cli()
, that translates
Python callables and types into fully-featured argument parsers and
configuration objects.
To get started, we recommend visiting the examples in our documentation.
Why tyro
?
-
Strong typing.
Unlike tools dependent on dictionaries, YAML, or dynamic namespaces, arguments populated by
tyro
benefit from IDE and language server-supported operations — think tab completion, rename, jump-to-def, docstrings on hover — as well as static checking tools likepyright
andmypy
. -
Minimal overhead.
Standard Python type annotations, docstrings, and default values are parsed to automatically generate command-line interfaces with informative helptext.
If you're familiar with type annotations and docstrings in Python, you already know how to use
tyro
! If you're not, learning to usetyro
reduces to learning to write modern Python.Hate
tyro
? Just remove one line of code, and you're left with beautiful, type-annotated, and documented vanilla Python that can be used with a range of other configuration libraries. -
Modularity.
tyro
supports hierarchical configuration structures, which make it easy to distribute definitions, defaults, and documentation of configurable fields across modules or source files. -
Tab completion.
By extending shtab,
tyro
automatically generates tab completion scripts for bash, zsh, and tcsh.
A minimal example
As a replacement for argparse
:
with argparse | with tyro |
"""Sum two numbers from argparse."""
import argparse
parser = argparse.ArgumentParser()
parser.add_argument(
"--a",
type=int,
required=True,
)
parser.add_argument(
"--b",
type=int,
default=3,
)
args = parser.parse_args()
print(args.a + args.b)
|
"""Sum two numbers by calling a
function with tyro."""
import tyro
def main(a: int, b: int = 3) -> None:
print(a + b)
tyro.cli(main)
"""Sum two numbers by instantiating
a dataclass with tyro."""
from dataclasses import dataclass
import tyro
@dataclass
class Args:
a: int
b: int = 3
args = tyro.cli(Args)
print(args.a + args.b)
|
For more examples, see our documentation.
In the wild
tyro
is still a new library, but being stress tested in several projects!
- nerfstudio uses
tyro
both to build compact command-line utilities and for YAML-free experiment configuration. - obj2mjcf uses
tyro
to build a CLI for processing composite Wavefront OBJ files for Mujoco. - tensorf-jax (unofficially)
implements Tensorial Radiance Fields
in JAX, with
tyro
for configuration.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.