42 votes

Comment stocker les données des applications de bureau sur plusieurs plates-formes pour Python?

J'ai un python application de bureau qui a besoin de stocker les données de l'utilisateur. Sur Windows, c'est en général en %USERPROFILE%\Application Data\AppName\, sur OSX, il est habituellement ~/Library/Application Support/AppName/, et sur les autres *nixes il est habituellement ~/.appname/.

Il existe une fonction de la bibliothèque standard, os.path.expanduser cela va me faire un répertoire home de l'utilisateur, mais je sais que sur Windows, au moins, "Application Data" est localisé dans la langue de l'utilisateur. Cela pourrait être vrai pour OSX ainsi.

Quelle est la bonne manière d'obtenir cette endroit?

Mise à JOUR: Certaines recherches indiquent que la bonne manière d'obtenir cette sur OSX est à l'aide de la fonction NSSearchPathDirectory, mais c'est le Cacao, donc, cela signifie que l'appel de la PyObjC pont...

46voto

Douglas Mayle Points 7216

Eh bien, je déteste avoir été celui qui a répondu à ma propre question, mais personne ne semble le savoir. Je laisse la réponse à la postérité.

 APPNAME = "MyApp"
import sys
from os import path, environ
if sys.platform == 'darwin':
    from AppKit import NSSearchPathForDirectoriesInDomains
    # http://developer.apple.com/DOCUMENTATION/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Functions/Reference/reference.html#//apple_ref/c/func/NSSearchPathForDirectoriesInDomains
    # NSApplicationSupportDirectory = 14
    # NSUserDomainMask = 1
    # True for expanding the tilde into a fully qualified path
    appdata = path.join(NSSearchPathForDirectoriesInDomains(14, 1, True)[0], APPNAME)
elif sys.platform == 'win32':
    appdata = path.join(environ['APPDATA'], APPNAME)
else:
    appdata = path.expanduser(path.join("~", "." + APPNAME))
 

6voto

Adam Szlachta Points 21

Vous pouvez essayer d'utiliser QSettings de Qt. Vous pouvez obtenir le chemin d'accès à votre fichier MyCompany / MyApp.ini de cette manière:

 from PySide.QtCore import QSettings, QCoreApplication

QSettings.setDefaultFormat(QSettings.IniFormat)
QCoreApplication.setOrganizationName("MyCompany")
QCoreApplication.setApplicationName("MyApp")
settings = QSettings()
print self.settings.fileName()
 

Sur Win7, vous obtenez quelque chose comme:

 C:\Users\MyUser\AppData\Roaming\MyCompany\MyApp.ini
 

Je ne connais pas les résultats possibles pour OSX / Linux (mais j'aimerais bien).

Les fonctionnalités de QSettings semblent être utiles jusqu'à ce que vous souhaitiez utiliser registerFormat, qui n'est pas disponible dans PySide. Il n'existe donc pas de moyen simple d'utiliser des graveurs YAML ou JSON pour les réglages.

0voto

shylent Points 4590

Eh bien, pour Windows, APPDATA (variable d'environnement) pointe vers le dossier "Application Data" d'un utilisateur. Pas sûr d'OSX, cependant.

La bonne façon, à mon avis, est de le faire plateforme par plateforme.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X