17

我正在使用 ConfigParser 来配置我的应用程序,现在我想让它易于分发,同时保持可配置性。

我在想我需要一个包含配置文件模板的目录,以及一些生成配置以从这些模板中实际使用的方法。然后我需要一个可以在 virtualenv、用户主目录等中工作的地方来存储它。我希望它与正常的 Unix 包的工作方式一样接近,即在等中有配置,但在主目录中具有覆盖。是否有现成的解决方案,如果没有,我应该在 setup.py 等中放入什么以使其按我想要的方式工作?

4

1 回答 1

13

您可以使用data_files选项在distutils任何您想要的地方安装文件。

data_files(directory, files)通过以下方式指定对序列:

setup(...,
      data_files=[('/etc', ['cfg/config1.ini', 'cfg/config2.ini']),
                  ('/etc/init.d', ['bin/initscript1'])],
      ....
     )

在您的应用程序上读取配置文件时,您可以使用对象方法/home合并一个版本(如果存在):.read()ConfigParser

files_read = cfgparserobj.read(['/etc/config1.ini', 
                                os.path.expanduser('~/.config1.ini')])
for fname in files_read:
    print "Reading config from", fname

如果存在,它将读取/etc/config1.ini并使用来自.config1.ini用户主目录中的内容覆盖定义。

于 2010-01-08T10:33:17.147 回答