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