Упаковка приложений Python с файлами конфигурации - PullRequest
14 голосов
/ 08 января 2010

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

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

1 Ответ

9 голосов
/ 08 января 2010

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

...