Упаковка приложений Python с конфигурационными файлами

Я использую ConfigParser для настройки моего приложения, и теперь я хочу сделать его легко распространяемым и в то же время сохранить конфигурацию.

Я думаю, мне нужен каталог с конфигурационными файловыми шаблонами и каким-то образом генерировать конфигурацию, чтобы фактически использовать их. Тогда мне нужно место для хранения, которое будет работать в virtualenv, домашнем каталоге пользователей и т.д. Я хочу, чтобы он был как можно ближе к тому, как работают обычные пакеты Unix, т.е. Имеют конфигурацию и т.д., Но с переопределениями в домашнем каталоге. Есть ли готовое решение для этого, а если нет, то что я должен добавить в свой setup.py и т.д., Чтобы заставить его работать, как я хочу?

Ответы

Ответ 1

вы можете использовать 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 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 в домашнем каталоге пользователя, если он существует.