Python единственный конфигурационный файл

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

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

ответ: выбравший для conf.py приближаются затем начиная с него, это является модульным, гибким и простым

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

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

22
задан João Portela 1 March 2010 в 09:06
поделиться

4 ответа

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

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

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

10
ответ дан 29 November 2019 в 05:44
поделиться

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

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

3
ответ дан 29 November 2019 в 05:44
поделиться

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

4
ответ дан 29 November 2019 в 05:44
поделиться

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

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)
1
ответ дан 29 November 2019 в 05:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: