Skip to main content
This is a pre-production deployment of Warehouse. Changes made here affect the production instance of PyPI (
Help us improve Python packaging - Donate today!

Wrapper that combines argparse with yaml config files.

Project Description

A wrapper for combining yaml configuration files and command line argument parsing. It builds upon PyYAML for parsing yaml config files and argparse for handling command line arguments and adds the clue produce one unified program configuration.


  • Python 2.7+ or 3.2+
  • PyYAML >= 3.1

Configuration Environments

Because configuration often differs depending on the environment, e.g. production and testing settings, yconf allows you to define multiple environments in a single configuration. The current supported environemts are production, staging and development. For convenience, yconf is able to merge environment configuration to reduce redundancy, meaning that if the environment is set to staging, the configuration will inherit all settings available in a production environment and override them with staging values where neseccary.



  rundir: /var/run/example
  database: /var/lib/example/db.sqlite
  loglevel: warning

  database: :memory:

  loglevel: debug


# production environment
config.rundir: /var/run/example
config.database: /var/lib/example/db.sqlite
config.loglevel: warning

# staging environment
config.rundir: /var/run/example
config.database: :memory:
config.loglevel: warning

# development environment
config.rundir: /var/run/example
config.database: :memory:
config.loglevel: debug

Both staging and development environments are optional.

If a directory is specified instead of a configuration file, yconf will look for configuration files by convention of <environment>.yml in that directory and merge them accordingly if possible.

Command Line Arguments

Extending the argument list supported by a configuration will require subclassing yconf.BaseConfiguration and overriding the makeParser method.


import sys
from yconf import BaseConfiguration

class MyConfig(BaseConfiguration):

  def makeParser(self):
    parser = super(MyConfig, self).makeParser()
    parser.add_argument("-f", "--foo", dest="foo")
    return parser

config = MyConfig()

The following configuration arguments are already preset:

  • -c Path to configuration file or directory
  • -e The environment used for configuration (default: production)

When present, command line argument always take precedent over configuration settings. To override nested yaml values, a dotted destination path can be set for the argument.


  loglevel: debug


parser.add_argument("--log-level", dest="logging.loglevel")

Accessing Configuration

Configuration can be accessed either by attribute or by key.

config = MyConfig()
config.parse(args) == config['foo'] == config['foo']['bar']

Release History

This version
History Node


History Node


History Node


History Node


Download Files

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

File Name & Hash SHA256 Hash Help Version File Type Upload Date
(7.9 kB) Copy SHA256 Hash SHA256
Source Apr 23, 2017

Supported By

WebFaction WebFaction Technical Writing Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Rackspace Rackspace Cloud Servers DreamHost DreamHost Log Hosting