我正在使用ConfigParser来配置我的应用程序,现在我想让它易于分发,同时保持可配置性。
我认为我需要一个包含配置文件模板的目录,以及一些生成配置以实际使用这些模板的方法。然后我需要一个存储它的地方,它可以在virtualenv,用户主目录等工作。我希望它与普通的Unix软件包一样接近,即在其他方面有配置,但在主目录中有覆盖。是否有现成的解决方案,如果没有,我应该在setup.py等中放置什么才能让它像我想要的那样工作?
答案 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
的内容覆盖定义(如果存在)。