Python’s standard library has modules for configuration file parsing (configparser), environment variable reading (os.environ), and command-line argument parsing (argparse). I want to write a program that does all those, and also:
-
Has a cascade of option values:
- default option values, overridden by
- config file options, overridden by
- environment variables, overridden by
- command-line options.
-
Allows one or more configuration file locations specified on the command line with e.g.
--config-file foo.conf, and reads that (either instead of, or additional to, the usual configuration file). This must still obey the above cascade. -
Allows option definitions in a single place to determine the parsing behaviour for configuration files and the command line.
-
Unifies the parsed options into a single collection of option values for the rest of the program to access without caring where they came from.
Everything I need is apparently in the Python standard library, but they don’t work together smoothly.
How can I achieve this with minimum deviation from the Python standard library?
It seems the standard library doesn’t address this, leaving each programmer to cobble
configparserandargparseandos.environall together in clunky ways.