打包包含配置文件的Python应用程序
我正在使用ConfigParser来配置我的应用程序,现在我想让它更容易分发,同时又能保持可配置性。
我在想,我需要一个包含配置文件模板的文件夹,以及一种从这些模板生成实际使用的配置文件的方法。然后我还需要一个存储位置,这个位置可以在虚拟环境、用户的主目录等地方都能用。我希望它的工作方式尽量接近普通的Unix软件包,也就是把配置放在/etc目录下,但可以在主目录中进行覆盖。有没有现成的解决方案?如果没有,我在setup.py等文件中应该放些什么才能让它像我想的那样工作呢?
1 个回答
13
你可以使用 data_files
这个选项,来把文件安装到你想要的任何地方。
data_files
用来指定一系列的 (目录, 文件)
对,格式如下:
setup(...,
data_files=[('/etc', ['cfg/config1.ini', 'cfg/config2.ini']),
('/etc/init.d', ['bin/initscript1'])],
....
)
在你的应用程序读取配置文件时,如果存在 /home
版本,你可以用 .read()
方法 来合并它:
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
,就会用它的内容覆盖之前的定义。