Где хранить настройки пользователя для приложения?


12

Если я хочу, чтобы мое приложение сохраняло несколько настроек, которые сохраняются при закрытии приложения, то где их хранить?

Я не говорю ничего сложного: два логических значения и строка (хотя в будущем я могу захотеть сохранить более сложные настройки)

Я слышал все упомянутое gconf, dconf, gsettings и т.д. Что такое «предпочтительный» метод? Желательно, чтобы это было легко и просто в Python.


Ответы:


9

gconfне рекомендуется, поэтому для нового проекта я бы не стал его использовать. dconfявляется бэкэндом для хранения настроек, как разработчик приложения, вам обычно не нужно беспокоиться об этом.

Похоже, что вам нужен gsettingsвысокоуровневый API ( документация API для C ) для хранения / извлечения настроек, не беспокоясь о том, как и где они хранятся. gsettingsявляется частью gio, которая является одним из основных пакетов gnome (как glibи gobject). Этот пост в блоге дает краткое введение, как использовать его с Python.

Если вы не хотите никаких зависимостей gio(например, вы не разрабатываете приложение GNOME) и хотите хранить простые конфигурационные файлы, я бы предложил вместо этого использовать $HOME/.configкаталог (или любой другой каталог, определенный в нем $XDG_CONFIG_DIRS) $HOME/.your_appnameв соответствии со спецификацией freedesktop ,


Кажется, ваша ссылка на пост в блоге мертва. Есть ли шанс, что у вас есть другой?
Сет

@ К сожалению, блог, на который я ссылался, больше не доступен. Я заменил ссылку ссылкой на другой пост в блоге, который также должен стать хорошей отправной точкой.
Марсель Стимберг

10

Приложение работает во всей системе

подходящее место для хранения настроек будет:

/etc/[application]/

где подкаталог является необязательным.


Приложение работает в режиме пользователя

Настройки должны храниться в пользовательском HOME, желательно в скрытом каталоге:

/home/<user>/<.application>/

Смотрите также Debian FHS .


Приложения, запущенные в X-Desktop

Приложения для X-Desktop (например, GNOME, KDE, Unity, Xfce) должны ссылаться на Спецификацию базового каталога XDG, где в локальных переменных определены следующие местоположения файлов:

  • $XDG_DATA_HOMEопределяет базовый каталог, относительно которого должны храниться файлы данных пользователя. Если $ XDG_DATA_HOME либо не установлен, либо пуст, следует использовать значение по умолчанию, равное $ HOME / .local / share.

  • $XDG_CONFIG_HOMEопределяет базовый каталог, относительно которого должны храниться файлы конфигурации пользователя. Если $ XDG_CONFIG_HOME либо не установлен, либо пуст, следует использовать значение по умолчанию, равное $ HOME / .config.

  • $XDG_DATA_DIRSопределяет упорядоченный по предпочтениям набор базовых каталогов для поиска файлов данных в дополнение к базовому каталогу $ XDG_DATA_HOME. Каталоги в $ XDG_DATA_DIRS должны быть разделены двоеточием ':'.

  • If $XDG_DATA_DIRS либо не установлен, либо пуст, следует использовать значение, равное / usr / local / share /: / usr / share /.

  • $XDG_CONFIG_DIRSопределяет упорядоченный по предпочтениям набор базовых каталогов для поиска файлов конфигурации в дополнение к базовому каталогу $ XDG_CONFIG_HOME. Каталоги в $ XDG_CONFIG_DIRS должны быть разделены двоеточием ':'. Если $ XDG_CONFIG_DIRS либо не установлен, либо пуст, следует использовать значение, равное / etc / xdg.


Нет, они должны быть в /home/<user>/.config/application/
Anonymous

@ Аноним: Было бы здорово иметь ссылку на это. Present политика Debian требует FHS 2.3 с исключением , что приложения рекомендуется для хранения параметров пользователя в файле дот (или каталога) в HOME пользователя.
Таккат

1

Быстро , который является одним из новых помощников для разработки приложений для Ubuntu , по умолчанию хранит все настройки с desktopcouch . Преимущество заключается в том, что эти настройки можно синхронизировать с другими установками с помощью инструментов Ubuntu One.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.