42

ユーザーデータを保存する必要がある Python デスクトップアプリケーションがあります。Windows では通常%USERPROFILE%\Application Data\AppName\、OSX では~/Library/Application Support/AppName/、その他の *nix では通常~/.appname/です。

標準ライブラリには、ユーザーのホーム ディレクトリを取得する関数が存在しますが、os.path.expanduser少なくとも Windows では、「アプリケーション データ」がユーザーの言語にローカライズされていることがわかっています。それはOSXにも当てはまるかもしれません。

この場所を取得する正しい方法は何ですか?

更新: OSX でこれを取得する正しい方法は関数 NSSearchPathDirectory を使用することですが、これは Cocoa であるため、PyObjC ブリッジを呼び出すことを意味することが、さらなる調査で示されています...

4

4 に答える 4

45

ええと、私が自分の質問に答えるのは嫌ですが、他の誰も知らないようです. 答えは後世に残します。

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))
于 2009-07-06T18:14:36.630 に答える
21

まさにそれを行う小さなモジュールが利用可能です:

https://pypi.org/project/appdirs/

于 2015-11-16T12:18:36.153 に答える
6

QSettingsQtから使用してみることができます。MyCompany/MyApp.ini ファイルへのパスは、次の方法で取得できます。

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:\Users\MyUser\AppData\Roaming\MyCompany\MyApp.ini

Linux の場合 (異なる場合があります):

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

OSXで考えられる結果はわかりません(でも知りたいです)。

QSettings機能はregisterFormat、PySide では使用できない を使用するまでは良さそうに見えるため、設定に YAML または JSON ライターを使用する簡単な方法はありません。

于 2012-12-24T23:30:42.660 に答える
0

Windows の場合、APPDATA (環境変数) はユーザーの "Application Data" フォルダーを指します。ただし、OSXについてはわかりません。

私の意見では、正しい方法は、プラットフォームごとに行うことです。

于 2009-07-05T19:50:27.447 に答える