How do I store desktop application data in a cross platform way for python?
Well, I hate to have been the one to answer my own question, but no one else seems to know. I'm leaving the answer for posterity.
APPNAME = "MyApp"import sysfrom os import path, environif 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))
There's a small module available that does exactly that:
You can try to use QSettings
from Qt. You can obtain the path to your MyCompany/MyApp.ini file this way:
from PySide.QtCore import QSettings, QCoreApplicationQSettings.setDefaultFormat(QSettings.IniFormat)QCoreApplication.setOrganizationName("MyCompany")QCoreApplication.setApplicationName("MyApp")settings = QSettings()print(settings.fileName())
Alternatively, without changing any global state:
QSettings( QSettings.IniFormat, QSettings.UserScope, "MyCompany", "MyApp").fileName()
On Win7 you get something like:
C:\Users\MyUser\AppData\Roaming\MyCompany\MyApp.ini
On Linux (may vary):
/home/myuser/.config/MyCompany/MyApp.ini
I don't know the possible results for OSX (but I'd like to).
QSettings
functionallity seem to be nice until you want to use registerFormat
, which is not available in PySide, so there is no easy way to use YAML or JSON writers for settings.