Simple config supporting CLI modification
Project description
sconf: Simple config system supporting CLI modification
sconf is yaml-based simple config library.
Features
- Supports merging multiple configs
- Supports CLI modification with argparse-like interface
- Supports coloring modified key-values
- Supports global access to config objects
Install
$ pip install sconf
Usage
Quickstart
A Minimal Example
from sconf import Config cfg = Config(default="configs/defaults.yaml") # load yaml cfg.argv_update() # apply CLI modification
You can modify cfg
by CLI in the runtime, with argparse-like interface.
Init with argparse and multiple configs
import argparse from sconf import Config parser = argparse.ArgumentParser() parser.add_argument("name") parser.add_argument("config_paths", nargs="*") parser.add_argument("--show", action="store_true", default=False) args, left_argv = parser.parse_known_args() # merging multiple configs if given cfg = Config(*args.config_paths, default="configs/defaults.yaml") cfg.argv_update(left_argv)
Run:
python train.py example configs/exp.yaml --lr 0.1
The resulting cfg
is based on configs/defaults.yaml
, merged with configs/exp.yaml
, and updated by --lr 0.1
.
Dumps
sconf dumps contents with coloring modified items.
print(cfg.dumps()) # If you do not want to colorize: print(cfg.dumps(modified_color=None))
Access
- Item access with dictionary-like interfaces:
# access print(cfg['key']) print(cfg['key1']['key2']) # get print(cfg.get('non-key', 'default-value')) # unpacking function(**cfg['model'])
- Attribute access:
print(cfg.key) print(cfg.key1.key2)
- Note that the attribute access returns method object for the duplicated key, unlike the item access.
cfg = Config({'get': 2}) print(cfg['get']) # 2 print(cfg.get) # method object
CLI modification
sconf supports CLI modification like argparse. Also you can access to the child key using dot.
# yaml example
batch_size: 64
model:
encoder:
n_channels: 64
decoder:
n_channels: 64
- CLI modification:
> python train.py --batch_size 128 --model.encoder.n_channels 32
- Accessing via partial key is also available:
> python train.py --encoder.n_channels 32
- Use triple dashs
---
if you want to modify multiple keys:
# modifying encoder.n_channels and decoder.n_channels both.
> python train.py ---n_channels 32
Global access to config object
Global access is useful in ML project, even though it can be anti-pattern in SW engineering.
# main.py cfg = Config({'weight_decay': 0.001}) # automatically registered first config to 'default' key # train.py cfg = Config.from_registry() # get 'default' config print(cfg.weight_decay) # 0.001
Note that registry_key
helps global access to multiple configs.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Filename, size | File type | Python version | Upload date | Hashes |
---|---|---|---|---|
Filename, size sconf-0.2.2-py3-none-any.whl (8.5 kB) | File type Wheel | Python version py3 | Upload date | Hashes View |