定番ディレクトリしたい(platformdirs

1import platformdirs
2platformdirs.user_data_dir("パッケージ名")
3platformdirs.user_cache_dir("パッケージ名")
4platformdirs.user_log_dir("パッケージ名", ensure_exists=True)

各種データを保存するディレクトリ名はOSによって異なります。 platformdirsを使うと定番パスを取得できます。 また、ensure_existsオプションを使うと、パスが存在しない場合に作成できます。

以下はmacOSで確認しました。

注釈

_dirで終わる関数(user_data_dirなど)は文字列(str)を返し、 _pathで終わる関数(user_data_pathなど)はpathlib.Pathオブジェクトを返します。 pathlibで後続の処理をしたい場合は_path系を使うと便利です。

ユーザーデータしたい(user_data_dir

1platformdirs.user_data_dir("パッケージ名")
2# '~/Library/Application Support/パッケージ名'
3
4platformdirs.user_data_path("パッケージ名")
5# PosixPath('~/Library/Application Support/パッケージ名')

注釈

Windowsでは、第二引数appauthorで発行元(会社名など)を指定できます (platformdirs.user_data_dir("パッケージ名", "発行元"))。 macOS/Linuxではパスに反映されませんが、Windowsではパスの一部として使われます。

キャッシュデータしたい(user_cache_dir

1platformdirs.user_cache_dir("パッケージ名")
2# '~/Library/Caches/パッケージ名'
3
4platformdirs.user_cache_path("パッケージ名")
5# PosixPath('~/Library/Caches/パッケージ名')

設定ファイルしたい(user_config_dir

1platformdirs.user_config_dir("パッケージ名")
2# '~/Library/Application Support/パッケージ名'
3
4platformdirs.user_config_path("パッケージ名")
5# PosixPath('~/Library/Application Support/パッケージ名')

アプリケーションの設定ファイルを保存する場所です。 macOSではuser_data_dirと同じパスになりますが、 LinuxやWindowsでは異なるパスになります。

ログしたい(user_log_dir

1platformdirs.user_log_dir("パッケージ名")
2# '~/Library/Logs/パッケージ名'
3
4platformdirs.user_log_path("パッケージ名")
5# PosixPath('~/Library/Logs/パッケージ名')

アプリケーションのログは、カレントディレクトリではなく、 ユーザーやシステムが探しやすい適切な場所に保存するのがよいとされています。

リファレンス