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

标签 python configuration-files packaging

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

我想我需要一个包含配置文件模板的目录,以及一些生成配置以从中实际使用的方法。然后我需要一个地方来存储它,它将在 virtualenv、用户主目录等中工作。我希望它尽可能接近普通 Unix 包的工作方式,即在 etc 中有配置,但在主目录中有覆盖。是否有针对此问题的现成解决方案?如果没有,我应该在 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() method of ConfigParser objects :

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

关于python - 使用配置文件打包 Python 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2026876/

相关文章:

python - 如何使这段包含函数、for 和 while 循环的代码运行良好?

python - 在 Python 中计算农历/阴阳假期

node.js - 如何让node.js自动加载配置文件

java - 打包java文件

java - session bean 属于应用程序吗?

mono - 构建 Mono 本身的 .deb 包

python - Flask系统找不到指定的路径: '130.127.5.9'

python - 使用 python 并行运行 n 个 MATLAB 实例

c++ - 在 Boost program_options 中解析配置文件的未注册选项?

java - 在 Java 中保存用户设置/数据库/缓存...(在每个操作系统上)