使用配置文件打包Python应用程序

时间:2010-01-08 10:24:52

标签: python configuration-files packaging

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

我认为我需要一个包含配置文件模板的目录,以及一些生成配置以实际使用这些模板的方法。然后我需要一个存储它的地方,它可以在virtualenv,用户主目录等工作。我希望它与普通的Unix软件包一样接近,即在其他方面有配置,但在主目录中有覆盖。是否有现成的解决方案,如果没有,我应该在setup.py等中放置什么才能让它像我想要的那样工作?

1 个答案:

答案 0 :(得分:9)

您可以使用distutils的{​​{3}}选项在任意位置安装文件。

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

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

在您的应用上阅读配置文件时,您可以使用data_files合并/home版本(如果存在):

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的内容覆盖定义(如果存在)。