Skip to content


Subversion checkout URL

You can clone with
Download ZIP
A python library for loading and reading configuration
Python Makefile



A python library for loading, validating and reading configuration from many heterogeneous formats. Configuration is split into two phases.

Configuration Loading

Configuration is read from files or python objects, flattened, and merged into a container called a namespace. Namespaces are used to separate unrelated configuration groups.

If configuration is changed frequently, it can also be reloaded easily with very little change to the existing code.

Configuration Reading

A configuration value is looked up in the namespace. It is validating and converted to the requested type.

Build Status

Travis CI build status Latest PyPI version Number of PyPI downloads Code Test Coverage


$ pip install PyStaticConfiguration

Also see the release notes.



A common minimal use of staticconf would be to use a single yaml configuration file and read some values from it.

import staticconf

filename = 'hosts.yaml'
namespace = 'hosts'

# Load configuration from the file into namespace `hosts`
staticconf.YamlConfiguration(file, namespace=namespace)

# Some time later on, read values from that namespace
print'database.slave', namespace=namespace)
print'database.master', namespace=namespace)

hosts.yaml might look something like this:

    slave: dbslave_1
    master: dbmaster_1

A more involved example would load configuration from multiple files, create a watcher for reloading, and read some config values.

from functools import partial
import os
import staticconf

def load_config(config_path, defaults='~/.myapp.yaml`)
    # First load global defaults if the file exists
    staticconf.INIConfiguration('/etc/myapp.ini', optional=True)

    # Next load user defaults
    staticconf.YamlConfiguration(defaults, optional=True)

    # Next load the specified configuration file

    # Now let's override it with some environment settings
        (k[5:].lower(), v) for k, v in os.environ if k.startswith('MYAPP_'))

def build_watcher(filename):
    return staticconf.ConfigFacade.load(
        filenames, 'DEFAULT', partial(load_config, filename))

def run(config_path):
    watcher = build_watcher(config_path)
    while is_work():

        current_threshold = staticconf.read_float('current_threshold')
Something went wrong with that request. Please try again.