2016-06-22 3 views
0

Я использую собственную утилиту ведения журнала при написании пакета python. Какое место лучше всего подходит для logging.conf?Лучшее место для log.conf в пакете python

Я следующую структуру пакета

/package 
setup.py 
.gitingore 
.... 
/dist 
    __init__.py 
    dosomething.py 
    /utils 
     /submodule1 
      submodule1.py 
     /logger 
      log.py 
/tests 
    ... 

я хочу поставить logging.conf с использованием модуля регистрации или в корневом каталоге пакета? Есть ли лучшее место?

ответ

1

Нелегко ответить. Я публикую это, потому что слишком длинный комментарий.

Ответ может зависеть от остальной организации вашего пакета (например, у вас есть только этот файл conf или некоторые другие? Может появиться другой файл conf через день?).

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

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

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

В вашем примере я бы разместил их в package/dist/settings/default/ и оставил полную конфигурацию по умолчанию, отслеживаемую git (или вашим VCS), например. стандартное рабочее «состояние», которое может быть установлено при использовании в производстве. Этот файл не предназначен для изменения пользователем. Затем в package/dist/settings/dev/ я помещал версии «dev» (не отслеживаемые git), где я могу изменить конфигурацию в соответствии с моими потребностями при разработке, не беспокоясь о git в любое время (и сохраняя при этом значения по умолчанию неизменными в каталоге default/). Это особенно полезно для отладки настроек, поскольку они часто меняются. (Тогда, хотя они не интересны для conf-файла только для ведения журналов, я упоминаю, что общесистемные файлы conf могут храниться в /etc/mypackage/, а переопределенные настройки пользователя могут быть сохранены в ~/.config/my_package/).

При загрузке параметров мой пакет сначала загружает конфигурацию по умолчанию, чтобы обеспечить определение всех значений. Затем он последовательно проверяет, есть ли какой-либо файл conf в /etc/mypackage/, затем в ~/.config/my_package/ и, наконец, в package/dist/settings/dev/. Каждый раз, когда он находит один, он переопределяет (возможно) переопределенные значения. (Так как все файлы конфигурации записаны в yaml, каждый найденный файл загружается в качестве словаря, и я просто update по умолчанию с этими новыми значениями. Таким образом, я могу изменять только те параметры, которые мне нравятся в моей конфигурации dev, а не упоминание остальные оставят для них значения по умолчанию).

Хороший способ узнать больше - просмотреть существующие проекты и посмотреть, как это делают другие.

Смежные вопросы