Skip to main content

Layered config library built around python dict

Project description

pyaconf - layered config library built around python dict

Pyaconf is yet another config library that has the following features:

  • Built around python dicts, json and yaml
  • All configs are json compatible dicts
  • Supports layered configs via __include__ dict entry, for example:
__include__: boo.json
user: romeo
password: romeoalpha
  • Can output configs in .json and .yaml
  • Supports .ini input format as understood by python's configparser
  • Very simple API: load, dump, and for more advance use merge
  • Supports dynamic configs written in Python .pyaconf, for example:
import os
def config():
   return dict(
      __include__ = "secret.yml"
      user = "romeo", 
      password = os.environ['PASSWORD']
      database = dict(
         __include__ = "db.ini"
  • Provides command line utility that resolves includes and python configs and outputs a static config in json or yaml that can be consumed by an application written in any language


  • load takes in a dict that may include special keyword __include__ at multiple levels, and it resolves these includes and returns a dict without includes. It can also read the input dict from a file.
load(path: string or pathlib.Path | fp: FILE or io. | conf: dict w/ includes, fmt: string = 'auto' ('auto'|'pyaconf'|'json'|'yaml'|'ini') -> dict w/o includes; if fmt=auto, deduces format by extension (.yaml, .yml, .json., .pyaconf, .ini)
  • dump outputs the resulting (resolved) config in yaml or json.
dump(d1: dict w/o includes, d2: dict w/o includes) -> dict w/o includes -- recursively merges dicts 
  • merge simply merges two dicts (that dont contain includes) and returns a new dict where the values of the first dict are updated recursively by the values of the second dict.

merge(ds) -> list of dicts w/o includes


  • First level of a config must be a dict.
  • Reserved key __include__ if present, should contain a path or list of paths to load. A path can be a string or a binary tuble containing the string and the format.
  • Python format has to contain a parameterless function config that returns dict w/o includes
    import os
    import pyaconf
    def config():
       prefix = "/aaa/bbb"
       conf = dict(
          __include__ = [
          prefix = prefix,
          full_prefix = prefix + "/xyz",
          dbpool = pyaconf.merge(
                __include__ = "zoo.pyaconf",
                database = "geom",
                host = "localhost",
                user = os.environ["DATABASE_USER"],
                password = None,
       return conf


OSI Approved 3 clause BSD License


  • Python 3.7+


If prerequisites are met, you can install pyaconf like any other Python package, using pip to download it from PyPI:

$ pip install pyaconf

or using if you have downloaded the source package locally:

$ python build
$ sudo python install

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyaconf-0.4.0.tar.gz (5.3 kB view hashes)

Uploaded source

Built Distribution

pyaconf-0.4.0-py3-none-any.whl (7.6 kB view hashes)

Uploaded py3

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Huawei Huawei PSF Sponsor Microsoft Microsoft PSF Sponsor NVIDIA NVIDIA PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page