{"id":2286,"library":"simple-parsing","title":"Simple-Parsing: Elegant Argument Parsing with Dataclasses","description":"Simple-parsing is a Python utility that significantly simplifies and cleans up argument parsing scripts by extending `argparse` with `dataclasses`. It allows developers to define command-line arguments in a structured, strongly typed, and object-oriented manner. Key features include support for inheritance, nesting of argument groups, easy serialization to JSON/YAML, and automatic generation of help strings from docstrings and comments. The library is currently at version 0.1.8 and maintains an active release cadence, with updates typically occurring every few months.","status":"active","version":"0.1.8","language":"en","source_language":"en","source_url":"https://github.com/lebrice/SimpleParsing","tags":["argument parsing","dataclasses","argparse","CLI","configuration"],"install":[{"cmd":"pip install simple-parsing","lang":"bash","label":"Install stable version"}],"dependencies":[],"imports":[{"note":"simple-parsing's ArgumentParser is a subclass of argparse.ArgumentParser, providing additional functionality like `add_arguments` for dataclasses.","wrong":"from argparse import ArgumentParser","symbol":"ArgumentParser","correct":"from simple_parsing import ArgumentParser"},{"note":"This provides a simplified API for directly parsing a single dataclass without explicit ArgumentParser instantiation.","symbol":"parse","correct":"from simple_parsing import parse"}],"quickstart":{"code":"from dataclasses import dataclass\nfrom simple_parsing import ArgumentParser, parse\nimport os\n\n@dataclass\nclass CommonOptions:\n    \"\"\"Common options for a script.\"\"\"\n    seed: int = 42\n    log_level: str = \"INFO\"\n\n@dataclass\nclass TrainingOptions:\n    \"\"\"Options specific to training.\"\"\"\n    learning_rate: float = 1e-4\n    epochs: int = 10\n    output_dir: str = os.environ.get('OUTPUT_PATH', './outputs')\n\n# Method 1: Using ArgumentParser (for multiple dataclasses or custom args)\nparser = ArgumentParser()\nparser.add_arguments(CommonOptions, dest=\"common\")\nparser.add_arguments(TrainingOptions, dest=\"train\")\n\nargs_parser = parser.parse_args(['--seed', '100', '--learning_rate', '0.01'])\nprint(f\"Parsed with ArgumentParser: Common: {args_parser.common}, Train: {args_parser.train}\")\n\n# Method 2: Simplified API (for single dataclass parsing)\nargs_simplified = parse(TrainingOptions, args=['--epochs', '20'])\nprint(f\"Parsed with simplified API: {args_simplified}\")\n","lang":"python","description":"This quickstart demonstrates two common ways to use `simple-parsing`: using the `ArgumentParser` for more complex scenarios involving multiple argument groups or standalone arguments, and using the simplified `parse` function for directly obtaining an instance of a single dataclass from command-line arguments. It showcases how dataclasses define arguments and how they are populated."},"warnings":[{"fix":"Upgrade Python to 3.9 or newer, or pin `simple-parsing<0.1.8`.","message":"Version 0.1.8 drops support for Python 3.8. Users on Python 3.8 or older must upgrade their Python environment to 3.9+ or use an older version of `simple-parsing`.","severity":"breaking","affected_versions":">=0.1.8"},{"fix":"Change `from argparse import ArgumentParser` to `from simple_parsing import ArgumentParser`.","message":"When using `ArgumentParser`, ensure you import `simple_parsing.ArgumentParser` and not `argparse.ArgumentParser`. Only the `simple_parsing` version provides methods like `add_arguments` for dataclass integration.","severity":"gotcha","affected_versions":"All"},{"fix":"Refactor dataclasses to not inherit from `ParseableFromCommandLine` and use `parser.add_arguments()` or `simple_parsing.parse()` instead.","message":"Older versions of simple-parsing (e.g., <0.0.3) used `ParseableFromCommandLine` as a base class for dataclasses. While it might still function, the recommended API for grouping arguments with dataclasses is `parser.add_arguments(YourDataclass, dest=\"your_dest\")` or using the `simple_parsing.parse` function for single dataclass parsing.","severity":"deprecated","affected_versions":"<0.0.3 (older API style)"},{"fix":"Always explicitly define a unique `dest` for each dataclass added via `add_arguments` to ensure proper grouping and access to the parsed dataclass instance (e.g., `args.attribute_name`).","message":"When using `parser.add_arguments(Dataclass, dest=\"attribute_name\")`, the `dest` argument is crucial. It specifies the attribute name on the parsed arguments object where the dataclass instance will be stored. Omitting it or using a conflicting `dest` can lead to unexpected argument flattening or overwrites.","severity":"gotcha","affected_versions":"All"}],"env_vars":null,"last_verified":"2026-04-09T00:00:00.000Z","next_check":"2026-07-08T00:00:00.000Z"}