Skip to main content

codecov PyPI - Python Version PyPI

sconf: Simple config system supporting CLI modification

sconf is yaml-based simple config library.

Features

  • Supports merging multiple configs
  • Supports CLI modification by 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")
cfg.argv_update()  # apply CLI modification

You can modify cfg by CLI in the runtime, by 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})  # first config is automatically registered to 'default' key

# train.py
cfg = Config.get_default()  # get 'default' config
print(cfg.weight_decay)  # 0.001

Note from_registry helps global access to multiple configs.

Note

  • sconf use utf-8 as a default encoding. If you want different encoding, use file pointer (open function) instead of file path as a key.

Release files for sconf 0.2.5

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distribution (wheel)

Table of built distributions (wheels) for sconf 0.2.5
File Interpreter ABI Platform
sconf-0.2.5-py3-none-any.whl Python 3 none any Details

Release files / sconf-0.2.5-py3-none-any.whl

Download URL sconf-0.2.5-py3-none-any.whl
Size 8.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c557b5a87d39dd7d5334a1236112873d2e0b1b71b386d24e2f01726aec1d957a
BLAKE2b-256 checksum
How to use checksums
9125e668d70f3482f615b046e34ef31ec2801cd3d4c2acf6a655eab409cae40b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.4.2 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.51.0 CPython/3.7.10

Release history Release notifications | RSS feed

This release

0.2.5 This release

1 release file

0.2.4

1 release file

0.2.3

1 release file

0.2.2

1 release file

0.2.1

1 release file

0.2.0

1 release file

0.1.2

1 release file

0.1.1

1 release file

0.1

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page