¿Dónde almacenar la configuración de usuario para una aplicación?

12

Si quiero que mi aplicación almacene algunas configuraciones, que persisten cuando se cierra una aplicación, ¿dónde debo guardarlas?

No estoy hablando de nada complicado: dos booleanos y una cadena (aunque en el futuro podría querer almacenar configuraciones más complejas)

He escuchado gconf, dconf, gsettings, etc., todos mencionados. ¿Cuál es el método "preferido"? Preferiblemente uno que sea agradable y fácil en Python.

8128
fuente
Relacionado: askubuntu.com/questions/42438/…
Tachyons

Respuestas:

9

gconfestá en desuso, por lo que para un nuevo proyecto no lo usaría. dconfes un back-end para almacenar la configuración, como desarrollador de aplicaciones normalmente no debería tener que preocuparse por ello.

Lo que parece necesitar es gsettingsuna API de alto nivel ( documentación de API para C ) para almacenar / recuperar configuraciones sin preocuparse de cómo / dónde se almacenan realmente. gsettingses parte de gio, que es uno de los paquetes principales de gnome (como gliby gobject). Esta publicación de blog ofrece una breve introducción sobre cómo usarlo con Python.

Si no desea dependencias gio(por ejemplo, no está desarrollando una aplicación GNOME) y desea almacenar archivos de configuración simples, le sugiero que use el $HOME/.configdirectorio (o cualquier directorio definido por $XDG_CONFIG_DIRS) en lugar de $HOME/.your_appname, en línea con la especificación de freedesktop .

Marcel Stimberg
fuente
Parece que su enlace a la publicación del blog está muerto. ¿Alguna posibilidad de que tengas otro?
Seth
@Seth desafortunadamente, la publicación de blog a la que estaba vinculando ya no parece estar disponible. Reemplacé el enlace con un enlace a otra publicación de blog que también debería ser un buen punto de partida.
Marcel Stimberg
10

La aplicación se ejecuta en todo el sistema

El lugar apropiado para almacenar la configuración sería:

/etc/[application]/

donde un subdirectorio es opcional.


Aplicación se ejecuta en un por usuario modo

la configuración debe almacenarse en el INICIO del usuario, preferiblemente en un directorio oculto:

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

Ver también el Debian FHS .


Aplicaciones que se ejecutan en X-Desktop

Las aplicaciones para el X-Desktop (por ejemplo, GNOME, KDE, Unity, Xfce) deben consultar la Especificación del directorio base de XDG donde las siguientes ubicaciones de archivos se definen en variables locales:

  • $XDG_DATA_HOMEdefine el directorio base en relación con el cual se deben almacenar los archivos de datos específicos del usuario. Si $ XDG_DATA_HOME no está configurado o está vacío, se debe usar un valor predeterminado igual a $ HOME / .local / share.

  • $XDG_CONFIG_HOMEdefine el directorio base en relación con el cual se deben almacenar los archivos de configuración específicos del usuario. Si $ XDG_CONFIG_HOME no está configurado o está vacío, se debe usar un valor predeterminado igual a $ HOME / .config.

  • $XDG_DATA_DIRSdefine el conjunto ordenado de preferencia de directorios base para buscar archivos de datos además del directorio base $ XDG_DATA_HOME. Los directorios en $ XDG_DATA_DIRS deben separarse con dos puntos ':'.

  • If $XDG_DATA_DIRS no está establecido o está vacío, se debe usar un valor igual a / usr / local / share /: / usr / share /.

  • $XDG_CONFIG_DIRSdefine el conjunto ordenado de preferencia de directorios base para buscar archivos de configuración además del directorio base $ XDG_CONFIG_HOME. Los directorios en $ XDG_CONFIG_DIRS deben separarse con dos puntos ':'. Si $ XDG_CONFIG_DIRS no está establecido o está vacío, se debe usar un valor igual a / etc / xdg.

Takkat
fuente
No, deberían estar en /home/<user>/.config/application/
Anónimo el
@ Anónimo: Sería genial tener una referencia para esto. La política actual de Debian requiere FHS 2.3 con la excepción de que se recomienda que las aplicaciones almacenen la configuración del usuario en un archivo de puntos (o directorio) en el INICIO del usuario.
Takkat