Gdzie przechowywać ustawienia użytkownika dla aplikacji?


12

Jeśli chcę, aby moja aplikacja zapisała kilka ustawień, które są zachowywane po zamknięciu aplikacji, to gdzie mam je zapisać?

Nie mówię nic skomplikowanego: dwa booleany i ciąg znaków (chociaż w przyszłości mógłbym chcieć przechowywać bardziej złożone ustawienia)

Słyszałem, że wspomniane są gconf, dconf, gsettings itp. Jaka jest „preferowana” metoda? Najlepiej taki, który jest miły i łatwy w Pythonie.


Odpowiedzi:


9

gconfjest przestarzałe, więc nie użyłbym go w nowym projekcie. dconfjest backendem do przechowywania ustawień, jako twórca aplikacji zwykle nie powinieneś się tym przejmować.

Wydaje się, że potrzebujesz gsettingswysokopoziomowego interfejsu API ( dokumentacja API dla C ) do przechowywania / pobierania ustawień bez zadawania sobie trudu, w jaki sposób / gdzie są one faktycznie przechowywane. gsettingsjest częścią gio, która jest jednym z podstawowych pakietów gnome (jak glibi gobject). Ten post na blogu zawiera krótkie wprowadzenie na temat używania go w Pythonie.

Jeśli nie chcesz żadnych zależności gio(np. Nie tworzysz aplikacji GNOME) i chcesz przechowywać proste pliki konfiguracyjne, sugeruję użycie $HOME/.configkatalogu (lub innego zdefiniowanego przez $XDG_CONFIG_DIRS) katalogu zamiast $HOME/.your_appname, zgodnie ze specyfikacją Freedesktop .


Wygląda na to, że Twój link do postu na blogu jest martwy. Czy jest jakaś szansa, że ​​masz inną?
Seth

@Seth niestety blog nie jest już dostępny. Zamieniłem link na link do innego posta na blogu, który również powinien być dobrym punktem wyjścia.
Marcel Stimberg

10

Aplikacja działa w całym systemie

odpowiednie miejsce do przechowywania ustawień to:

/etc/[application]/

gdzie podkatalog jest opcjonalny.


Aplikacja działa w trybie użytkownika

ustawienia powinny być przechowywane w DOMU użytkownika, najlepiej w ukrytym katalogu:

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

Zobacz także Debian FHS .


Aplikacje działające w X-Desktop

Aplikacje na X-Desktop (np. GNOME, KDE, Unity, Xfce) powinny odnosić się do specyfikacji katalogu podstawowego XDG, w której następujące lokalizacje plików są zdefiniowane w zmiennych lokalnych:

  • $XDG_DATA_HOMEdefiniuje katalog podstawowy, względem którego powinny być przechowywane określone pliki danych użytkownika. Jeśli $ XDG_DATA_HOME nie jest ustawiony lub pusty, należy użyć wartości domyślnej równej $ HOME / .local / share.

  • $XDG_CONFIG_HOMEdefiniuje katalog podstawowy, względem którego powinny być przechowywane specyficzne dla użytkownika pliki konfiguracyjne. Jeśli $ XDG_CONFIG_HOME nie jest ustawiony lub jest pusty, należy użyć wartości domyślnej równej $ HOME / .config.

  • $XDG_DATA_DIRSdefiniuje uporządkowany preferencyjnie zestaw katalogów podstawowych do wyszukiwania plików danych oprócz katalogu podstawowego $ XDG_DATA_HOME. Katalogi w $ XDG_DATA_DIRS powinny być oddzielone dwukropkiem „:”.

  • If $XDG_DATA_DIRS nie jest ustawiony ani pusty, należy użyć wartości równej / usr / local / share /: / usr / share /.

  • $XDG_CONFIG_DIRSdefiniuje uporządkowany preferencyjnie zestaw katalogów podstawowych do wyszukiwania plików konfiguracyjnych oprócz katalogu podstawowego $ XDG_CONFIG_HOME. Katalogi w $ XDG_CONFIG_DIRS powinny być oddzielone dwukropkiem „:”. Jeśli $ XDG_CONFIG_DIRS nie jest ustawiony lub jest pusty, należy użyć wartości równej / etc / xdg.


Nie, powinny znajdować się w /home/<user>/.config/application/
Anonimowy

@Anonymous: Fajnie byłoby mieć referencje na ten temat. Obecne zasady Debiana wymagają FHS 2.3, z tym wyjątkiem, że aplikacje są zalecane do przechowywania ustawień użytkownika w pliku kropkowym (lub katalogu) w HOME użytkownika.
Takkat

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.