如何以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))
一个小模块,确切地说:
你可以尝试从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的可能结果(但我想)。
QSettings
function似乎是不错的,直到你想使用PyForce中没有的registerFormat,所以没有简单的方法来使用YAML或JSON编写器进行设置。
那么,对于Windows APPDATA(环境variables)指向用户的“应用程序数据”文件夹。 不知道有关OSX,但。
在我看来,正确的方法是在每个平台上进行。