如何以python的跨平台方式存储桌面应用程序数据?

我有一个需要存储用户数据的Python桌面应用程序。 在Windows上,这通常是%USERPROFILE%\Application Data\AppName\ ,在OSX上通常是~/Library/Application Support/AppName/ ,而在其他* nixes上通常是~/.appname/

在标准库os.path.expanduser中存在一个函数,它将使用户的主目录,但我知道在Windows上,至less“应用程序数据”已经被本地化为用户的语言。 对于OSX也是如此。

什么是正确的方式来获得这个位置?

更新:一些进一步的研究表明,在OSX上得到这个的正确方法是使用函数NSSearchPathDirectory,但这是cocoa,所以它意味着调用PyObjC桥…

好吧,我讨厌自己回答自己的问题,但是其他人似乎都不知道。 我留给后人的答案。

 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)) 

一个小模块,确切地说:

https://pypi.python.org/pypi/appdirs/1.4.0

你可以尝试从Qt中使用QSettings 。 您可以通过这种方式获取MyCompany / MyApp.ini文件的path:

 from PySide.QtCore import QSettings, QCoreApplication QSettings.setDefaultFormat(QSettings.IniFormat) QCoreApplication.setOrganizationName("MyCompany") QCoreApplication.setApplicationName("MyApp") settings = QSettings() print(settings.fileName()) 

或者,不改变任何全局状态:

 QSettings( QSettings.IniFormat, QSettings.UserScope, "MyCompany", "MyApp" ).fileName() 

在Win7上,你会得到如下的东西:

  C:\用户\ MYUSER \应用程序数据\漫游\ MyCompany的\ MYAPP.INI 

在Linux上(可能会有所不同):

  /home/myuser/.config/MyCompany/MyApp.ini 

我不知道OSX的可能结果(但我想)。

QSettingsfunction似乎是不错的,直到你想使用PyForce中没有的registerFormat,所以没有简单的方法来使用YAML或JSON编写器进行设置。

那么,对于Windows APPDATA(环境variables)指向用户的“应用程序数据”文件夹。 不知道有关OSX,但。

在我看来,正确的方法是在每个平台上进行。