Форум сайта python.su
Доброго времени суток.
Народ, как лучше организовать хранение конфигурации программы?
Затрудняюсь с выбором: использовать для этого обычные конфигурационные файлы (где информация организована в формате ключ=значение), то ли файлы формата YAML.
И еще, сколько делать конфигурационных файлов?
Создаю приложение, которое будет состоять минимум из 5, максимум - из 20 модулей, в каждом 5-10 классов, в каждом классе 5-10 методов.
Можно делать по конфигурационному файлу на модуль + 1 общий для общих параметров всего приложения. И, соответственно, при старте каждого модуля - считывать данные из его конфигурационного файла.
Можно хранить все в одном конфигурационном файле, а при начале работы считывать значения, допустим, в один namedtuple. Будет в этом именованном кортеже 50, ну максимум - 200 элементов - это ведь не много.
Как оптимально сделать по вашему мнению?
Офлайн
Используй обычные ini файлы. YAML/XML имеет смысл использовать только если параметров очень много и они образуют какую-то иерархию. Файл должен быть один на приложение, разные модули могут хранить свои параметры в отдельных секциях.
Офлайн
streetmoverна ваше усмотрение, мы ведь не знаем ни что будет делать ваша программа, ни какие данные она там будет хранить, ни как часто они будут там обновляться. Если у вас программа “монолитна” то проще конечно все хранить в одном файле, а если ваши “модули” могут подключаться-отключаться то лучше конечно для каждого модуля иметь свой файл настроек.
И еще, сколько делать конфигурационных файлов?
streetmoverЭто вообще ниочем, какая разница сколько вас модулей, сколько в них класоов, и сколько в классах методов? Вы что собираетесь хранить данные о каждом классе и каждом методе в нем в конфиг файле?
Создаю приложение, которое будет состоять минимум из 5, максимум - из 20 модулей, в каждом 5-10 классов, в каждом классе 5-10 методов.
streetmoverделайте как вам удобнее,хоть в реестре храните(если у вас платформа Win), принципильной разницы нету.
Затрудняюсь с выбором: использовать для этого обычные конфигурационные файлы (где информация организована в формате ключ=значение), то ли файлы формата YAML.
streetmoverНе много, и кстати нет смысла хранить все 200 значений, наверняка некоторые нужны только во время старта программы(например начальное положения окна, запскаться свернутым/развернутым, ну ХЗ что там у вас еще) какой смысл их держать в памяти на протяжении всего времени работы программы.Я понимаю что виграш всего пару байт но всеже….
Можно хранить все в одном конфигурационном файле, а при начале работы считывать значения, допустим, в один namedtuple. Будет в этом именованном кортеже 50, ну максимум - 200 элементов - это ведь не много.
[code python][/code]
Офлайн
streetmoverВ нескольких файлах в одной папке (нельзя смешивать всё в кучу). Формат - близкий к текстовому без спецсимволов. YAML хорош, но для него нужно ставить сторонний модуль.
Народ, как лучше организовать хранение конфигурации программы?
Отредактировано py.user.next (Март 15, 2017 11:48:47)
Офлайн
Первое
в список ini, yaml можно добавить json и py файлы.
У ini файлов есть интересная возможность подстановки значений из общей секции, но иерархия строго два ключа, одно значение.
yaml - произвольная иерархия данных. Зачастую важно что простейший yaml проще простейшего ini файла.
Много конфигов характерно для ini файлов когда для у структуры key1 key2 = value не хватает выразительности.
Много конфигов yaml бывает полезно когда величины сгруппированы по смыслу. Например одна группа меняется очень часто а другая редко. Тогда например в системе контроля версий надо будет сравнивать меньше текста, поскольку файл с редко меняющимися параметрами практически не надо будет проверять. ну и т.п.
Отредактировано doza_and (Март 16, 2017 06:14:26)
Офлайн
doza_andКонфиги разделяются так же, как таблицы в базе данных. То есть есть конфиги, касающиеся одной темы, есть конфиги, касающиеся другой темы. Например, настройки программы хранятся в одном конфиге (размер окна, настроенные опции программы), а настройки для аккаунтов в программе храняться в своих конфигах (имя пользователя, его индивидуальный таймаут при подключении). А если же ты сохраняешь всё в один файл, то получается ситация, как в Emacs'е, - получается файл, который долго загружается и который нельзя редактировать руками, потому что он редактируется автоматически самим Emacs'ом. И ты как бы хочешь его и руками редактировать, и из программы редактировать. Всё это может давать коллизии. Другое дело - как у Apache конфиги сделаны: тебе нужен виртуальный хост, ты делаешь отдельный файл для него и кладёшь в папку виртуальных хостов. В Gimp'е тоже всё очень сильно разделено, можешь бэкапить кисти или там шаблоны, и при этом бэкап не цепляет тонну всего остального.
Много конфигов характерно для ini файлов когда для выразительности не хватает структуры key = value.
Отредактировано py.user.next (Март 16, 2017 03:13:31)
Офлайн