bryhoyt
bryhoyt

Reputation: 273

Python: What is the recommended way to set configuration settings for a module when you import it?

I've seen people use monkey-patching to set options on a module, for example:

import mymodule  
mymodule.default_img = "/my/file.png"  
mymodule.view_default_img()  

And Django, for example, has settings.py for the entire Django app, and it always grates on me a little.

What are the other ways to manage configuration settings on a module? What's recommended? It seems like there's often no nice way to setup module-level configuration.

Obviously, completely avoiding configuration is by far the most preferable, and it's usually better to use classes, or pass in the argument to a function. But sometimes you can't avoid having settings of some sort, and sometimes it really does make sense to have global module-wide settings just for convenience (for example, Django's template system -- having to specify the base path for every template would be a nightmare, definitely not good DRY code).

Upvotes: 8

Views: 5208

Answers (1)

aaronasterling
aaronasterling

Reputation: 71004

One option is the ConfigParser module. You could have the settings in a non-python config file and have each module read its settings out of that. Another option is to have a config method in each module that the client code can pass it's arguments too.

# foo.py
setting1 = 0
setting2 = 'foo'

def configure(config1, config2):
    global setting1, setting2

    setting1 = config1
    setting2 = config2

Then in the importing module,

import foo

foo.configure(42, 'bar')

Personally, I think that the best way to do it is with the settings file like django.

Upvotes: 3

Related Questions