在config.py中导入值

时间:2014-01-20 22:33:37

标签: python config configparser

我想混合一个config.py方法和ConfigParser来设置config.py中的一些默认值,这些默认值可以被用户在其根文件夹中覆盖:

import ConfigParser
import os

CACHE_FOLDER = 'cache'
CSV_FOLDER = 'csv'

def main():
    cp = ConfigParser.ConfigParser()
    cp.readfp(open('defaults.cfg'))
    cp.read(os.path.expanduser('~/.python-tools.cfg'))
    CACHE_FOLDER = cp.get('folders', 'cache_folder')
    CSV_FOLDER = cp.get('folders', 'csv_folder')

if __name__ == '__main__':
    main()

运行此模块时,我可以看到CACHE_FOLDER的值被更改。但是,当在另一个模块中时,我会执行以下操作:

import config

def main()
    print config.CACHE_FOLDER

这将打印变量的原始值('cache')。

我做错了吗?

1 个答案:

答案 0 :(得分:1)

您显示的代码中的main函数仅在该模块作为脚本运行时运行(由于if __name__ == '__main__'块)。如果你希望在模块加载的任何时候转弯运行,你应该摆脱这个限制。如果有额外的代码实际上在main函数中执行了一些有用的操作,除了设置配置之外,您可能希望将该部分从设置代码中分离出来:

def setup():
    # the configuration stuff from main in the question

def main():
    # other stuff to be done when run as a script

setup()  # called unconditionally, so it will run if you import this module

if __name__ == "__main__":
    main()  # this is called only when the module is run as a script