跨平台配置文件寻址

11 投票
3 回答
2345 浏览
提问于 2025-04-16 01:09

简单的情况

我有一个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")


稍微复杂一点的情况

同样的方式可以用在用户特定的配置上吗?也就是说,能不能把配置放在Unix系统的~user/.myprogram/目录下,而在Windows系统的HKEY_LOCAL_USER注册表部分呢?

3 个回答

1

现在的回答没有完全解决你的问题(跨平台 + 用户配置和系统配置的区别)。

confuse库可以满足你的需求:

这个库可以把来自多个地方的配置数据结合在一起。通过分层的方式,Confuse 允许用户的配置轻松覆盖系统的配置,而系统的配置又可以覆盖内置的默认设置。
[...]
在包内的 config_default.yaml 文件可以用来提供最底层的默认设置,使用的语法和用户看到的一样。运行时的覆盖层允许程序动态地覆盖和添加配置值。你可以在特定平台的路径中查找配置文件,比如在 Unix 系统中是 $XDG_CONFIG_HOME 或 ~/.config;在 macOS 中是“Application Support”;在 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

6

在Windows系统上,Python可以使用正斜杠(/)来表示文件路径。而且,os.path.expanduser这个功能在Windows上也能正常工作,所以你可以通过以下方式获取特定用户的文件路径:

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

如果你想在用户的主目录中找到一个.ini文件。我不太确定怎么把基于文件的.ini设置和注册表设置统一起来。

撰写回答