A small utility for simplifying and cleaning up argument parsing scripts.
Project description
Simple, Elegant, Typed Argument Parsing
simple-parsing
allows you to transform your ugly argparse
scripts into beautifully structured, strongly typed little works of art.
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("--log_dir logs --foo 123".split())
print(args.foo) # 123
print(args.options) # Options(log_dir='logs', learning_rate=0.0001)
Additionally, simple-parsing
makes it easier to document your arguments by generating "--help"
strings directly from your source code!
$ 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)
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
--help
message is often hard to write and to maintain, especially as the number of arguments increases.With
simple-parsing
, your arguments and their decriptions 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
argparse
code and renaming variables, you can reuse your argument class, and let theArgumentParser
take care of addingrelevant
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.experiment_name "training" \ --valid.experiment_name "validation" Options(experiment_name='training', learning_rate=0.0001) Options(experiment_name='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
-
Easy serialization: Easily save/load configs to
json
oryaml
!. -
Inheritance! You can easily customize an existing argument class by extending it and adding your own attributes, which helps promote code reuse accross 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-parsing
makes 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-parsing
allows you to parse nested lists or tuples, as can be seen in this example -
(More to come!)
Examples:
Additional examples for all the features mentioned above can be found in the examples folder
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.
Source Distribution
Built Distribution
Hashes for simple_parsing-0.0.11.post4.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8294184fb38edde5d6f149c6d33d3c330b18dec69120e1e8f87f6b06949b9f05 |
|
MD5 | dd0060cc3eec5a05324d0e485f6ea75e |
|
BLAKE2b-256 | 69663decdd10fb766b6dacd68503affe210e0c6b218d451325ecd89cf174c10b |
Hashes for simple_parsing-0.0.11.post4-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 790a91405d752275ce69f5ad74372c84a99897e18ec1866bae6df89cae68c934 |
|
MD5 | 8e6f12e10a994ec6dc6f3020d0bb78cc |
|
BLAKE2b-256 | 54c8a9782da7735d5c720512c83de30657cc370053a82bf98827c07ef4087932 |