config files in python

Matimus mccredie at gmail.com
Mon May 5 19:16:15 EDT 2008


On May 4, 11:35 pm, sandipm <sandip.m... at gmail.com> wrote:
> Hi,
>  In my application, I have some configurable information which is used
> by different processes. currently I have stored configration in a
> conf.py file as name=value pairs, and I am importing conf.py file to
> use this variable. it works well
>
> import conf
> print conf.SomeVariable
>
> but if I need to change some configuration parameteres,  it would need
> me to restart processes.
>
> I want to store this data in some conf file (txt) and would like to
> use it same way as I am using these variables as defined in py
> files.
>
> one solution I can think of is writing data as a dictionary into conf
> file. and then by reading data, apply eval on that data. and update
> local dict? but this is not a good solution....
>
> any pointers?
>
> Sandip

I would load the configuration file using `imp.load_source'. This
allows you to load the config file by filename, and gets away from the
issue of accidentally importing a file somewhere else in pythons
search path. Also, calling imp.load_source will reload the module when
called a second time.

http://docs.python.org/lib/module-imp.html

[conf.py]
a = 1
b = 2
class c:
    a = "hello"
    b = "world"
[/end conf.py]

>>> conf = imp.load_source("conf", "./conf.py")
>>> conf.a
1
>>> conf.b
2
>>> conf.c.a
'hello'
>>> conf.c.b
'world'



There are so many ways potential solutions to your problem that,
without any more details, it is hard to suggest anything.

Here are some potential solutions:

ConfigParser - module for handling ini files
xml - several built-in modules for handling XML files
sqlite3 - a `lite' SQL database built-in in python 2.5 + (can be used
for config data)
windows registry  - _winreg module
pickle - serialize python objects
marshal - similar to pickle, only works for simple objects

Those are just the built-in solutions. If you wanna look at 3rd party
solutions, prepare for overload. The number of alternative INI parsers
alone is staggering.

Also, there are many ways to organize your data and use a solution
similar to what you are already using.

I guess what I'm trying to say is... don't roll your own, it would be
a waste of time, this problem has been solved 100s of times. That is,
unless you want to do it for fun.

Matt



More information about the Python-list mailing list