配置文件的跨平台寻址

时间:2010-07-12 10:25:10

标签: python cross-platform configuration-files

简单案例

我有一个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 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分: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

答案 2 :(得分:1)

当前答案不能完全解决您的问题(跨平台+用户与系统范围的配置)。

confuse library回答您的需求:

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