すべてのプラットフォーム (少なくとも Win/Mac/Linux) でアプリ データ (構成ファイルなど) の適切なディレクトリを取得するコード スニペットが必要です。例: Windows では %APPDATA%/。
6 に答える
appdirs モジュールを使用してもかまわない場合は、問題が解決するはずです。(コスト = モジュールをインストールするか、Python アプリケーションに直接含める必要があります。)
次の関数を使用して、ユーザー データ dir を取得できます。これは、Linux および w10 でテストされており (dir を返します)、 appdirsパッケージAppData/Local
から適合されています。
import sys
from pathlib import Path
from os import getenv
def get_user_data_dir(appname):
if sys.platform == "win32":
import winreg
key = winreg.OpenKey(
winreg.HKEY_CURRENT_USER,
r"Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
)
dir_,_ = winreg.QueryValueEx(key, "Local AppData")
ans = Path(dir_).resolve(strict=False)
elif sys.platform == 'darwin':
ans = Path('~/Library/Application Support/').expanduser()
else:
ans=Path(getenv('XDG_DATA_HOME', "~/.local/share")).expanduser()
return ans.joinpath(appname)
このプログラムを使用するオペレーティング システムの「appdata」の場所を調査することをお勧めします。場所がわかったら、if ステートメントを使用して os と do_something() を簡単に検出できます。
import sys
if sys.platform == "platform_value":
do_something()
elif sys.platform == "platform_value":
do_something()
- システム: platform_value
- Linux (2.x および 3.x): 「linux2」
- Windows: 「win32」
- Windows/Cygwin: 「cygwin」
- Mac OS X:「ダーウィン」
- OS/2: 'os2'
- OS/2 EMX: 'os2emx'
- RiscOS:「リスコス」
- AtheOS: 「アテオス」
リストは公式の Python ドキュメントからのものです。(「sys.platform」を検索)
同様の問題に遭遇し、すべての Windows % パスを事前に知らなくても動的に解決したいと考えました。os.path.expandvars
パスを動的に解決するために使用できます。このようなもの:
from os import path
appdatapath = '%APPDATA%\MyApp'
if '%' in appdatapath:
appdatapath = path.expandvars(appdatapath)
print(appdatapath)
最後の行が出力されます:C:\Users\\{user}\AppData\Roaming\MyApp
これは Windows では機能しますが、Linux ではテストしていません。パスが環境によって定義されている限り、expandvars はそれを見つけることができるはずです。展開変数の詳細については、こちらをご覧ください。