【问题标题】:Cross-platform addressing of the config file配置文件的跨平台寻址
【发布时间】:2011-03-14 17:54:50
【问题描述】:

简单案例

我有一个 Python 程序,我打算在 *nix 和 Windows 系统上都支持它。该程序必须是可配置的,至少是全局的。有没有跨平台的方式来处理配置文件?

即我想写而不是

import platform
if platform.system() == "Windows":
    configFilePath = "C:\MyProgram\mainconfig.ini"
else:
    configFilePath = "/etc/myprogram/mainconfig.ini"

类似的东西

import configmagic
configFile = configmagic("myprogram", "mainconfig")


稍微高级一点的案例

同样可以应用于用户特定的配置吗? IE。 Unix 下~user/.myprogram/ 中的配置,Windows 下HKEY_LOCAL_USER 注册表部分中的配置?

【问题讨论】:

  • 感谢您的提示,但这并不是真正的骗局。这两个问题是关于配置文件的格式,而我的问题是关于它的位置。
  • 不要使用 ~/.myprogram,使用 XDG BaseDir 规范,它定义了您应该存储/读取配置的位置。 (默认情况下,~/.config/myprogram)。

标签: python cross-platform configuration-files


【解决方案1】:

当前答案为您的问题提供了不完整的解决方案(跨平台 + 用户与系统范围的配置)。

confuse library 满足您的需求:

结合来自多个来源的配置数据。使用分层, Confuse 允许用户特定的配置无缝覆盖 系统范围的配置,进而覆盖内置默认值。
[...]
可以使用包内的 config_default.yaml 来提供底层 默认使用与用户将看到的相同的语法。运行时覆盖 允许程序以编程方式覆盖和添加配置 价值观。在特定于平台的路径中查找配置文件。喜欢 $XDG_CONFIG_HOME 或 Unix 上的 ~/.config; macOS 上的“应用程序支持”; Windows 上的 %APPDATA%。

【讨论】:

    【解决方案2】:

    您可能想使用dirspec。它适用于 GNU/Linux、Mac OS 和 Windows。

    您可以从:Launchpad获得它

    或者从PyPI安装它

    pip install dirspec
    

    并在您的代码中使用类似:

    from dirspec.basedir import get_xdg_config_home
    config_path = get_xdg_config_home()
    

    它由 Ubuntu One 使用,请查看其文档中的以下代码示例:https://one.ubuntu.com/developer/data/u1db/tutorial#storing-and-retrieving-tasks

    【讨论】:

      【解决方案3】:

      Python 将允许在 Windows 上使用正斜杠路径,os.path.expanduser 也适用于 Windows,因此您可以使用以下方法获取用户特定的文件路径:

      config_file = os.path.expanduser("~/foo.ini")
      

      如果您想在用户的主目录中找到 .ini。我不确定如何统一基于文件的 .ini 和注册表设置。

      【讨论】:

      • 太好了,有没有办法解决第一种情况(全局配置文件路径)?
      猜你喜欢
      • 1970-01-01
      • 2015-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多