Уведомления

Группа в Telegram: @pythonsu

#1 Март 15, 2017 06:33:30

streetmover
От:
Зарегистрирован: 2010-06-25
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Хранение конфигурации программы

Доброго времени суток.

Народ, как лучше организовать хранение конфигурации программы?

Затрудняюсь с выбором: использовать для этого обычные конфигурационные файлы (где информация организована в формате ключ=значение), то ли файлы формата YAML.

И еще, сколько делать конфигурационных файлов?

Создаю приложение, которое будет состоять минимум из 5, максимум - из 20 модулей, в каждом 5-10 классов, в каждом классе 5-10 методов.

Можно делать по конфигурационному файлу на модуль + 1 общий для общих параметров всего приложения. И, соответственно, при старте каждого модуля - считывать данные из его конфигурационного файла.

Можно хранить все в одном конфигурационном файле, а при начале работы считывать значения, допустим, в один namedtuple. Будет в этом именованном кортеже 50, ну максимум - 200 элементов - это ведь не много.

Как оптимально сделать по вашему мнению?



Офлайн

#2 Март 15, 2017 09:41:03

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2796
Репутация: +  185  -
Профиль   Отправить e-mail  

Хранение конфигурации программы

Используй обычные ini файлы. YAML/XML имеет смысл использовать только если параметров очень много и они образуют какую-то иерархию. Файл должен быть один на приложение, разные модули могут хранить свои параметры в отдельных секциях.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#3 Март 15, 2017 09:47:47

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Хранение конфигурации программы

streetmover
И еще, сколько делать конфигурационных файлов?
на ваше усмотрение, мы ведь не знаем ни что будет делать ваша программа, ни какие данные она там будет хранить, ни как часто они будут там обновляться. Если у вас программа “монолитна” то проще конечно все хранить в одном файле, а если ваши “модули” могут подключаться-отключаться то лучше конечно для каждого модуля иметь свой файл настроек.
streetmover
Создаю приложение, которое будет состоять минимум из 5, максимум - из 20 модулей, в каждом 5-10 классов, в каждом классе 5-10 методов.
Это вообще ниочем, какая разница сколько вас модулей, сколько в них класоов, и сколько в классах методов? Вы что собираетесь хранить данные о каждом классе и каждом методе в нем в конфиг файле?

streetmover
Затрудняюсь с выбором: использовать для этого обычные конфигурационные файлы (где информация организована в формате ключ=значение), то ли файлы формата YAML.
делайте как вам удобнее,хоть в реестре храните(если у вас платформа Win), принципильной разницы нету.
streetmover
Можно хранить все в одном конфигурационном файле, а при начале работы считывать значения, допустим, в один namedtuple. Будет в этом именованном кортеже 50, ну максимум - 200 элементов - это ведь не много.
Не много, и кстати нет смысла хранить все 200 значений, наверняка некоторые нужны только во время старта программы(например начальное положения окна, запскаться свернутым/развернутым, ну ХЗ что там у вас еще) какой смысл их держать в памяти на протяжении всего времени работы программы.Я понимаю что виграш всего пару байт но всеже….




==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

#4 Март 15, 2017 11:45:46

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9973
Репутация: +  856  -
Профиль   Отправить e-mail  

Хранение конфигурации программы

streetmover
Народ, как лучше организовать хранение конфигурации программы?
В нескольких файлах в одной папке (нельзя смешивать всё в кучу). Формат - близкий к текстовому без спецсимволов. YAML хорош, но для него нужно ставить сторонний модуль.

А вообще копируй то, что уже сделано в известных программах: Gimp, Git, KDE, Firefox. Они там по-разному сделаны, но у каждой можно что-то перенять для своих программ.

Вот что не надо - так это xml. (Это если точно будешь её руками редактировать.) Я сделал ошибку (думал, можно редактировать руками, раз он текстовый), теперь надо переделывать программу, так как оказалось, что редактировать его руками просто так нельзя, потому что надо знать синтаксис xml (экранирования там всякие и другие особенности). То есть для такой конфигурации нужно делать писальщик конфигурации, который будет брать данные и сохранять их правильно, для ручного редактирования xml не подходит. Сейчас пользуюсь программой своей, в которой конфигурация в xml хранится, и каждый раз, настраивая её на очередной ресурс, вспоминаю и перепроверяю всё по несколько раз, а то можно неправильно ситаксис применить и она неправильно сработает, а я даже не узнаю сразу. Вот чтобы этого не было, нужно либо формат правильный выбрать, либо написать оболочку, которая будет управлять конфигурацией.



Отредактировано py.user.next (Март 15, 2017 11:48:47)

Офлайн

#5 Март 15, 2017 21:16:31

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Хранение конфигурации программы

Первое
в список ini, yaml можно добавить json и py файлы.
У ini файлов есть интересная возможность подстановки значений из общей секции, но иерархия строго два ключа, одно значение.
yaml - произвольная иерархия данных. Зачастую важно что простейший yaml проще простейшего ini файла.


Много конфигов характерно для ini файлов когда для у структуры key1 key2 = value не хватает выразительности.
Много конфигов yaml бывает полезно когда величины сгруппированы по смыслу. Например одна группа меняется очень часто а другая редко. Тогда например в системе контроля версий надо будет сравнивать меньше текста, поскольку файл с редко меняющимися параметрами практически не надо будет проверять. ну и т.п.



Отредактировано doza_and (Март 16, 2017 06:14:26)

Офлайн

#6 Март 16, 2017 03:11:20

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9973
Репутация: +  856  -
Профиль   Отправить e-mail  

Хранение конфигурации программы

doza_and
Много конфигов характерно для ini файлов когда для выразительности не хватает структуры key = value.
Конфиги разделяются так же, как таблицы в базе данных. То есть есть конфиги, касающиеся одной темы, есть конфиги, касающиеся другой темы. Например, настройки программы хранятся в одном конфиге (размер окна, настроенные опции программы), а настройки для аккаунтов в программе храняться в своих конфигах (имя пользователя, его индивидуальный таймаут при подключении). А если же ты сохраняешь всё в один файл, то получается ситация, как в Emacs'е, - получается файл, который долго загружается и который нельзя редактировать руками, потому что он редактируется автоматически самим Emacs'ом. И ты как бы хочешь его и руками редактировать, и из программы редактировать. Всё это может давать коллизии. Другое дело - как у Apache конфиги сделаны: тебе нужен виртуальный хост, ты делаешь отдельный файл для него и кладёшь в папку виртуальных хостов. В Gimp'е тоже всё очень сильно разделено, можешь бэкапить кисти или там шаблоны, и при этом бэкап не цепляет тонну всего остального.

А когда конфиги разделены, то каждый конфиг становится проще, у него там проще дела с именами параметров, со всем.



Отредактировано py.user.next (Март 16, 2017 03:13:31)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version