小编典典

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

python

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

标准库中有一个函数os.path.expanduser,它将为我提供用户的主目录,但我知道至少在Windows上,“应用程序数据”已本地化为用户的语言。OSX也可能是这样。

获取此位置的正确方法是什么?

更新:
一些进一步的研究表明,在OSX上获得此功能的正确方法是使用功能NSSearchPathDirectory,但这就是Cocoa,因此它意味着调用PyObjC桥…


阅读 215

收藏
2020-12-20

共1个答案

小编典典

好吧,我不想成为回答我自己问题的人,但似乎没人知道。我留下后人的答案。

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))
2020-12-20