Подтвердить что ты не робот

Один файл конфигурации python

Я разрабатываю проект, для которого требуется один файл конфигурации, данные которого используются несколькими модулями.
Мой вопрос: какой общий подход к этому? я должен прочитать файл конфигурации из каждого моих модулей (файлов) или есть ли другой способ сделать это?

Я думал иметь модуль с именем config.py, который читает файлы конфигурации, и всякий раз, когда мне нужен конфиг, я делаю import config, а затем делаю что-то вроде config.data['teamsdir'], чтобы получить свойство 'teamsdir' (например).

ответ: выбрал подход conf.py, так как он модульный, гибкий и простой

Я могу просто поместить данные конфигурации непосредственно в файл, последний, если я хочу прочитать из json файла xml файл или несколько источников, я просто изменяю conf.py и удостоверяюсь, что к данным обращаются одинаково.

принятый ответ: выбрал ответ "Алекс Мартелли", потому что он был наиболее полным. проголосовали за другие ответы, потому что они тоже хорошие и полезные.

4b9b3361

Ответ 1

Мне нравится подход одного модуля config.py, тело которого (при первом импорте) анализирует один или несколько файлов конфигурационных данных и соответственно устанавливает свои "глобальные переменные" - хотя я бы одобрил config.teamdata по сравнению с приблизительный config.data['teamdata'] подход.

Предполагается, что настройки конфигурации доступны только для чтения после загрузки (за исключением, возможно, сценариев тестирования модулей, где тестовый код будет выполнять свою собственную искусственную настройку переменных config для правильной реализации кода под тестом) - - он в основном использует природу модуля как простейшую питонскую форму "singleton" (когда вам не нужны подклассы или другие функции, поддерживаемые только классами, а не модулями, конечно).

"Один или несколько" файлов конфигурации (например, сначала где-то в /etc для общих настроек по умолчанию, затем один под /usr/local для переопределений для сайта, а затем, возможно, один в домашнем каталоге пользователя для пользовательских настроек ) является общей и полезной моделью.

Ответ 2

Подход, который вы описываете, в порядке. Если вы хотите добавить поддержку пользовательских файлов конфигурации, вы можете использовать execfile(os.path.expanduser("~/.yourprogram/config.py")).

Ответ 3

Один приятный подход - разобрать конфигурационный файл в объект Python, когда приложение запускается и передает этот объект всем классам и модулям, требующим доступа к конфигурации.

Это может сэкономить много времени на разбор конфигурации.

Ответ 4

Если вы хотите поделиться своей конфигурацией на разных компьютерах, вы можете поместить ее на веб-сервер и импортировать вот так:

import urllib2
confstr = urllib2.urlopen("http://yourhost/config.py").read()
exec(confstr)

И если вы хотите поделиться им на разных языках, возможно, вы можете использовать JSON для кодирования и анализа конфигурации:

import urllib2
import simplejson
confstr = urllib2.urlopen("http://yourhost/config.py").read()
config = simplejson.loads(confstr)