I'm using ConfigParser for configuring my application, and now I want to make it easily distributable, and at the same time preserve the configurability.
I'm thinking I need a directory with configuration file templates, and some way of generating the configuration to actually use from these. Then I need a place to store it that will work in virtualenv, the users home directory etc. I want it to be as close to how normal Unix packages work, i.e. have config in etc, but with overrides in home directory. Is there a readymade solution for this, and if not, what should I put in my setup.py etc to make it work like I want?
Python's native packaging is mostly built for distributing reusable code, called libraries, between developers. You can piggyback tools, or basic applications for developers, on top of Python's library packaging, using technologies like setuptools entry_points. Libraries are building blocks, not complete applications.
Python can have config files with all settings needed by the application dynamically or periodically. Python config files have the extension as . ini. We'll use VS Code (Visual Studio Code) to create a main method that uses config file to read the configurations and then print on the console.
you can use data_files
option of distutils
to install files wherever you want.
data_files
specifies a sequence of (directory, files)
pairs in the following way:
setup(...,
data_files=[('/etc', ['cfg/config1.ini', 'cfg/config2.ini']),
('/etc/init.d', ['bin/initscript1'])],
....
)
When reading the config file on your app, you can merge a /home
version if it exists, using .read()
method of ConfigParser
objects:
files_read = cfgparserobj.read(['/etc/config1.ini',
os.path.expanduser('~/.config1.ini')])
for fname in files_read:
print "Reading config from", fname
That will read /etc/config1.ini
and then overwrite the definitions with stuff coming from .config1.ini
in the user's home directory, if it exists.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With