简单案例
我有一个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
注册表部分中?
答案 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%。