【问题标题】:Where to store the configuration files of python applications on Windowswindows下python应用的配置文件存放在哪里
【发布时间】:2012-06-27 14:35:08
【问题描述】:

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

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

保存配置文件的最佳位置是什么?我已经读过,对于 Windows,os.environ['APPDATA']+'myAppName' 是必须使用的路径。这是对的吗?是标准的吗?它是否适用于至少从 XP 开始的所有 Windows 版本(至少是英语和西班牙语)?

PD:我对使用 ConfigParser 不感兴趣。配置文件是我自己的格式,我有可以从中读取/写入的工作代码。

【问题讨论】:

  • 当你明确要求 Windows 的东西时,我已经为你修复了标题。希望没关系。
  • 你应该使用os.path.join(os.environ['APPDATA'], 'myAppName')来构建路径
  • os.path.expandvars('$APPDATA/myAppName')
  • 另见 "Where Should I Put Configuration Files?" 在 SoftwareEngineering 上。

标签: python windows


【解决方案1】:

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

现在,您可能应该使用类似 appdirs 库的东西来找到存储配置的好路径。

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

【讨论】:

  • 感谢您的建议。所以您说无论使用什么版本的 Windows(XP、Vista、7... 32 位、64 位...英语、西班牙语),使用 APPDATA 是否安全?
  • Latest standards 似乎建议使用~/.local 下的目录来存储应用程序数据。
  • @glglgl for application data,你是对的。但是 OP 正在询问用户可配置的应用程序 settings ,如果未设置 $XDG_CONFIG_HOME ,则应使用 ~/.config 。如果您遵守 XDG 基本目录规范,那就是。
【解决方案2】:

在 Linux 上,通常将配置文件存储在用户主目录中,例如 ~/.myprogramrc。在 Windows Vista 及更高版本上,用户也有一个主目录(/Users/username),并且建议将您的设置存储在一个子文件夹(/Users/useranem/myprogram)中。将设置存储在应用程序文件夹中会生成 UAC 警告。

在 Windows XP 上,用户没有主文件夹。有些程序会选择将配置放在“我的文档”文件夹中,我想这是一个很好的地方。

【讨论】:

  • 在 XP 上,还有一种主文件夹。它是My Documents 文件夹的父级。但不建议在那里弄痛什么东西;相反,应该使用APPDATA 方法。
  • 感谢您的帮助。正如罗丹所说,将文件写入“程序文件”时,UAC 是一个问题。 @glglgl 我没有要测试的 XP 机器,你知道在这个操作系统中到 APPDATA 的路径是什么吗?
  • 这里(WinXP,德语版)是C:\Dokumente und Einstellungen\myusername\Anwendungsdaten,在英文下可能是C:\Documents and Settings\myusername\Appdata 或类似的。
  • 在 XP 上有一个名为 HOMEPATH 的环境变量,其中包含当前用户主文件夹的路径。
  • 正如在对已接受答案的评论中所说,您应该使用$XDG_CONFIG_HOME/myprogram/myprogramrc,而不是使用~/.myprogramrc,它通常解析为~/.config/myprogram/myprogramrc
【解决方案3】:

平台目录

现在有一个更好的解决方案......比推测每个平台上最好的是什么,比可能定义或可能不定义的环境变量更好,甚至比appdirs更好:platformdirsGitHubPyPISnyk)。

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

【讨论】:

    猜你喜欢
    • 2019-07-01
    • 2011-11-25
    • 1970-01-01
    • 2017-11-19
    • 1970-01-01
    • 2010-10-15
    • 2019-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多