Onde armazenar as configurações do usuário para um aplicativo?

12

Se eu quiser que meu aplicativo armazene algumas configurações que persistem quando um aplicativo é fechado, onde devo armazená-las?

Não estou falando de nada complicado: dois booleanos e uma string (embora no futuro eu queira armazenar configurações mais complexas)

Eu ouvi gconf, dconf, gsettings, etc, todos mencionados. Qual é o método "preferido"? De preferência um que seja agradável e fácil em Python.

8128
fonte
Relacionados: askubuntu.com/questions/42438/...
Tachyons

Respostas:

9

gconfestá obsoleta, portanto, para um novo projeto, eu não o usaria. dconfé um back-end para armazenar as configurações, como desenvolvedor de aplicativos você normalmente não precisa se preocupar com isso.

O que você parece precisar é de gsettingsuma API de alto nível ( documentação da API para C ) para armazenar / recuperar configurações sem incomodar como / onde elas estão realmente armazenadas. gsettingsfaz parte do gio, que é um dos principais pacotes do gnome (like glibe gobject). Esta postagem do blog fornece uma breve introdução sobre como usá-lo com o Python.

Se você não deseja nenhuma dependência gio(por exemplo, não está desenvolvendo um aplicativo GNOME) e deseja armazenar arquivos de configuração simples, sugiro usar o $HOME/.configdiretório (ou qualquer diretório definido por $XDG_CONFIG_DIRS) em vez de $HOME/.your_appname, de acordo com a especificação freedesktop .

Marcel Stimberg
fonte
Parece que seu link para a postagem do blog está morto. Alguma chance de você ter outro?
Seth
@ Infelizmente, o post no qual eu estava vinculando não parece mais estar disponível. Substituí o link por outro link de blog que também deve ser um bom ponto de partida.
Marcel Stimberg
10

Aplicativo executa todo o sistema

o local apropriado para armazenar as configurações seria:

/etc/[application]/

onde um subdiretório é opcional.


O aplicativo é executado no modo por usuário

As configurações devem ser armazenadas no HOME do usuário, de preferência em um diretório oculto:

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

Veja também o Debian FHS .


Aplicativos em execução no X-Desktop

Os aplicativos para o X-Desktop (por exemplo, GNOME, KDE, Unity, Xfce) devem consultar a Especificação do diretório base do XDG onde os seguintes locais de arquivos são definidos nas variáveis ​​locais:

  • $XDG_DATA_HOMEdefine o diretório base em relação ao qual os arquivos de dados específicos do usuário devem ser armazenados. Se $ XDG_DATA_HOME não estiver definido ou vazio, um padrão igual a $ HOME / .local / share deverá ser usado.

  • $XDG_CONFIG_HOMEdefine o diretório base em relação ao qual os arquivos de configuração específicos do usuário devem ser armazenados. Se $ XDG_CONFIG_HOME não estiver definido ou vazio, um padrão igual a $ HOME / .config deve ser usado.

  • $XDG_DATA_DIRSdefine o conjunto de diretórios base ordenados por preferência para procurar arquivos de dados, além do diretório base $ XDG_DATA_HOME. Os diretórios em $ XDG_DATA_DIRS devem ser separados por dois pontos ':'.

  • If $XDG_DATA_DIRS não está definido ou está vazio, um valor igual a / usr / local / share /: / usr / share / deve ser usado.

  • $XDG_CONFIG_DIRSdefine o conjunto de diretórios base ordenados por preferência para procurar arquivos de configuração, além do diretório base $ XDG_CONFIG_HOME. Os diretórios em $ XDG_CONFIG_DIRS devem ser separados por dois pontos ':'. Se $ XDG_CONFIG_DIRS não estiver definido ou vazio, um valor igual a / etc / xdg deve ser usado.

Takkat
fonte
Não, eles devem estar em /home/<user>/.config/application/
Anônimo
@ Anonymous: Seria legal ter uma referência para isso. A política atual do Debian requer o FHS 2.3, com a exceção de que os aplicativos são recomendados para armazenar as configurações do usuário em um arquivo (ou diretório) de ponto na HOME do usuário.
Takkat 28/10/11