在Windows上存储Python应用程序的配置文件的位置在哪里?

10

我有一个Python程序,必须在Windows和Linux上运行。有一些配置选项,我通常会将其存储在程序目录的子目录中的文件中。

对于Windows,我将其转换为exe并创建了安装程序。现在我面临处理配置文件的问题。

最佳保存配置文件的位置是什么?我已经阅读到对于Windows来说os.environ['APPDATA']+'myAppName'是必须使用的路径。这是否正确?是否标准?它至少能在XP以及英语和西班牙语版本的所有Windows版本中工作吗?

附注:我不想使用ConfigParser。配置文件是按照我自己的格式编写的,并且我已经有了读取/写入代码的工作。


1
由于您明确要求有关Windows的内容,我已经为您修正了标题。希望这样可以满足您的要求。 - bcelary
4
你应该使用 os.path.join(os.environ['APPDATA'], 'myAppName') 来构建路径。 - Eric
1
os.path.expandvars('$APPDATA/myAppName') - Cameron White
1
还可以在 SoftwareEngineering 上看到“我应该将配置文件放在哪里?”的文章(https://softwareengineering.stackexchange.com/questions/160097/)。 - domsson
3个回答

9

将设置存储在用户目录中通常是一个很好的主意。

现在,你应该使用类似于appdirs库来找到一个好的路径来存储你的配置文件。

在大多数Unix系统下,只需要在主目录中存储一个(最好是点前缀的)文件。在OS X下,你需要在用户的Library文件夹中创建一个目录,并在那里存储您的文件。在Windows下,APPDATA是为你的应用程序建立目录的好地方。它应该适用于所有Windows本地化版本,而且在Windows XP中也可用。


谢谢您的建议。所以您的意思是无论使用哪个版本的Windows(XP,Vista,7... 32位,64位...英语,西班牙语),使用APPDATA都是安全的? - jeanc
最新的标准似乎建议使用~/.local目录来存储应用程序数据。 - glglgl
2
@glglgl 对于应用程序_data_,您是正确的。但是OP正在询问用户可配置的应用程序_settings_,如果未设置$XDG_CONFIG_HOME,则应使用~/.config。如果您遵守XDG基本目录规范的话。 - scottbb

5

platformdirs

现在有一个更好的解决方案...它比猜测每个平台上的最佳解决方案更好,比可能被定义或未定义的环境变量更好,甚至比appdirs更好: platformdirsGitHubPyPISnyk)。

import platformdirs
appname = 'OurGreatApp'
print(f"User config files should be stored in {platformdirs.user_config_dir(appname)}")

2
在Linux上,通常将配置文件存储在用户的主目录中,例如~/.myprogramrc。在Windows Vista及以上版本中,用户也有一个主目录(/Users/username),建议将设置存储在其中的一个子文件夹中(/Users/useranem/myprogram)。将设置存储在应用程序文件夹中会生成UAC警告。
在Windows XP上,用户没有主文件夹。一些程序选择将配置放在“My Documents”文件夹中,我想这是一个不错的选择。

2
在XP系统中,也有一种主文件夹。它是“我的文档”文件夹的父级文件夹。但不建议在那里存储任何东西;相反,应该使用“APPDATA”方法。 - glglgl
感谢您的帮助。正如罗丹所说,当写入文件到“Program Files”时,UAC是一个问题。@glglgl我没有XP机器进行测试,您知道在这个操作系统中APPDATA的路径是什么吗? - jeanc
这里(WinXP,德语版)是 C:\Dokumente und Einstellungen\myusername\Anwendungsdaten,在英语版本中可能是 C:\Documents and Settings\myusername\Appdata 或类似的路径。 - glglgl
在XP系统中,有一个名为HOMEPATH的环境变量,其中包含当前用户主文件夹的路径。 - martineau
正如在接受的答案评论中所说,您应该使用 $XDG_CONFIG_HOME/myprogram/myprogramrc 而不是 ~/.myprogramrc,这通常会解析为 ~/.config/myprogram/myprogramrc - domsson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接