Simple, Elegant, Typed Argument Parsing
simple-parsing allows you to transform your ugly argparse scripts into beautifully structured, strongly typed little works of art. This isn't a fancy, complicated new command-line tool either, this simply adds new features to plain-old argparse!
Using dataclasses, simple-parsing makes it easier to share and reuse command-line arguments - no more copy pasting!
Supports inheritance, nesting, easy serialization to json/yaml, automatic help strings from comments, and much more!
# examples/demo.py
from dataclasses import dataclass
from simple_parsing import ArgumentParser
parser = ArgumentParser()
parser.add_argument("--foo", type=int, default=123, help="foo help")
@dataclass
class Options:
""" Help string for this group of command-line arguments """
log_dir: str # Help string for a required str argument
learning_rate: float = 1e-4 # Help string for a float argument
parser.add_arguments(Options, dest="options")
args = parser.parse_args()
print("foo:", args.foo)
print("options:", args.options)
$ python examples/demo.py --log_dir logs --foo 123
foo: 123
options: Options(log_dir='logs', learning_rate=0.0001)
$ python examples/demo.py --help
usage: demo.py [-h] [--foo int] --log_dir str [--learning_rate float]
optional arguments:
-h, --help show this help message and exit
--foo int foo help (default: 123)
Options ['options']:
Help string for this group of command-line arguments
--log_dir str Help string for a required str argument (default:
None)
--learning_rate float
Help string for a float argument (default: 0.0001)
(new) Simplified API:
For a simple use-case, where you only want to parse a single dataclass, you can use the simple_parsing.parse or simple_parsing.parse_known_args functions:
options: Options = simple_parsing.parse(Options)
# or:
options, leftover_args = simple_parsing.parse_known_args(Options)
installation
pip install simple-parsing
Examples
API Documentation (Under construction)
Features
-
Automatic "--help" strings
As developers, we want to make it easy for people coming into our projects to understand how to run them. However, a user-friendly
--helpmessage is often hard to write and to maintain, especially as the number of arguments increases.With
simple-parsing, your arguments and their descriptions are defined in the same place, making your code easier to read, write, and maintain. -
Modular, Reusable, Cleanly Grouped Arguments
(no more copy-pasting)
When you need to add a new group of command-line arguments similar to an existing one, instead of copy-pasting a block of
argparsecode and renaming variables, you can reuse your argument class, and let theArgumentParsertake care of adding relevant prefixes to the arguments for you:parser.add_arguments(Options, dest="train") parser.add_arguments(Options, dest="valid") args = parser.parse_args() train_options: Options = args.train valid_options: Options = args.valid print(train_options) print(valid_options)
$ python examples/demo.py \ --train.log_dir "training" \ --valid.log_dir "validation" Options(log_dir='training', learning_rate=0.0001) Options(log_dir='validation', learning_rate=0.0001)
These prefixes can also be set explicitly, or not be used at all. For more info, take a look at the Prefixing Guide
-
Argument subgroups
It's easy to choose between different argument groups of arguments, with the
subgroupsfunction! -
Setting defaults from Configuration files
Default values for command-line arguments can easily be read from many different formats, including json/yaml!
-
Easy serialization:
Easily save/load configs to
jsonoryaml!. -
Inheritance!
You can easily customize an existing argument class by extending it and adding your own attributes, which helps promote code reuse across projects. For more info, take a look at the inheritance example
-
Nesting!:
Dataclasses can be nested within dataclasses, as deep as you need!
-
Easier parsing of lists and tuples :
This is sometimes tricky to do with regular
argparse, butsimple-parsingmakes it a lot easier by using the python's builtin type annotations to automatically convert the values to the right type for you. As an added feature, by using these type annotations,simple-parsingallows you to parse nested lists or tuples, as can be seen in this example -
Enums support
-
(More to come!)
Examples:
Additional examples for all the features mentioned above can be found in the examples folder
Metadata
Release files for simple-parsing 0.1.9
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| simple_parsing-0.1.9.tar.gz | 256.3 kB | Without provenance | Details for simple_parsing-0.1.9.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| simple_parsing-0.1.9-py3-none-any.whl | Python 3 | none | any | Details for simple_parsing-0.1.9-py3-none-any.whl |
Total release size: 370.0 kB
Release files / simple_parsing-0.1.9.tar.gz
| Download URL | simple_parsing-0.1.9.tar.gz |
|---|---|
| Size | 256.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0ff184ebaa6606420989ddbcb5650b21c62e2a59ec5388bc76c3343bda872cde
|
|
BLAKE2b-256 checksum How to use checksums |
1078137540f597d7937cc9a14681341e7584838aa2697aeeb62adcecc4868581
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.5.25
|
Release files / simple_parsing-0.1.9-py3-none-any.whl
| Download URL | simple_parsing-0.1.9-py3-none-any.whl |
|---|---|
| Size | 113.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
398c6b2c3d6ee3b865a6b8d7413999ee7b373de3c5a047f0b12b03b705d52e16
|
|
BLAKE2b-256 checksum How to use checksums |
dcde95277ceb670f0076d0d9ee06ade551d236e4989e2853e15a369bd7c67e5f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.5.25
|
Security for simple-parsing 0.1.9
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.