Simple-Parsing: Elegant Argument Parsing with Dataclasses

0.1.8 · active · verified Thu Apr 09

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.

Warnings

Install

Imports

Quickstart

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.

from dataclasses import dataclass
from simple_parsing import ArgumentParser, parse
import os

@dataclass
class CommonOptions:
    """Common options for a script."""
    seed: int = 42
    log_level: str = "INFO"

@dataclass
class TrainingOptions:
    """Options specific to training."""
    learning_rate: float = 1e-4
    epochs: int = 10
    output_dir: str = os.environ.get('OUTPUT_PATH', './outputs')

# Method 1: Using ArgumentParser (for multiple dataclasses or custom args)
parser = ArgumentParser()
parser.add_arguments(CommonOptions, dest="common")
parser.add_arguments(TrainingOptions, dest="train")

args_parser = parser.parse_args(['--seed', '100', '--learning_rate', '0.01'])
print(f"Parsed with ArgumentParser: Common: {args_parser.common}, Train: {args_parser.train}")

# Method 2: Simplified API (for single dataclass parsing)
args_simplified = parse(TrainingOptions, args=['--epochs', '20'])
print(f"Parsed with simplified API: {args_simplified}")

view raw JSON →