single |
jsonargparse
============
Docs: https://jsonargparse.readthedocs.io/ | Source:
https://github.com/omni-us/jsonargparse/
jsonargparse is a library for creating command-line interfaces (CLIs) and
making Python apps easily configurable. It is a well-maintained project
with
frequent releases, adhering to high standards of development: semantic
versioning, deprecation periods, changelog, automated testing, and full
test
coverage.
Although jsonargparse might not be widely recognized yet, it already boasts
a [substantial user base
]. Most notably,
it serves as the framework behind pytorch-lightning's [LightningCLI
].
Teaser examples
---------------
CLI with minimal boilerplate:
.. code-block:: python
from jsonargparse import auto_cli
def main_function(...): # your main parameters and logic here
...
if __name__ == "__main__":
auto_cli(main_function) # parses arguments and runs main_function
Minimal boilerplate but manually parsing:
.. code-block:: python
from jsonargparse import auto_parser
parser = auto_parser(main_function)
cfg = parser.parse_args()
...
Powerful argparse-like low level parsers:
.. code-block:: python
from jsonargparse import ArgumentParser
parser = ArgumentParser()
parser.add_argument("--config", action="config") # support config
files
parser.add_argument("--opt", type=Union[int, Literal["off"]]) #
complex arguments via type hints
parser.add_function_arguments(main_function, "function") # add
function parameters
parser.add_class_arguments(SomeClass, "class") # add class parameters
...
cfg = parser.parse_args()
init = parser.instantiate_classes(cfg)
...
Features
--------
jsonargparse is user-friendly and encourages the development of **clean,
high-quality code**. It encompasses numerous powerful features, some unique
to
jsonargparse, while also combining advantages found in similar packages:
- **Automatic** creation of CLIs, like [Fire
], [Typer
], [Clize
] and [Tyro
].
- Use **type hints** for argument validation, like [Typer
], [Tap
] and [Tyro
].
- Use of **docstrings** for automatic generation of help, like [Tap
], [Tyro
] and [SimpleParsing
].
- Parse from **configuration files** and **environment variables**, like
[OmegaConf], [dynaconf
], [confuse
] and [configargparse
].
- **Dataclasses** support, like [SimpleParsing
] and [Tyro
].
|