在Linux下从操作系统无关的地方加载配置文件
问题描述:
我把我的配置放在“〜/ .programname”中。我应该把它放在窗户里? 什么是建议的方式打开配置文件独立于Python的操作系统?在Linux下从操作系统无关的地方加载配置文件
谢谢! 弥敦道
答
尝试:
os.path.expanduser('~/.programname')
在Linux上,这将返回:
>>> import os
>>> os.path.expanduser('~/.programname')
'/home/user/.programname'
在Windows上,将返回:
>>> import os
>>> os.path.expanduser('~/.programname')
'C:\\Documents and Settings\\user/.programname'
这是一个小丑陋的,所以你”可能会想这样做:
>>> import os
>>> os.path.join(os.path.expanduser('~'), '.programname')
'C:\\Documents and Settings\\user\\.programname'
编辑:对于它的价值,我的Windows机器上的以下应用程序在我Documents and Settings\user
文件夹中创建自己的配置文件夹:
- 的Android
- AgroUML
- 瘸子
- IPython的
编辑2:哇,我只是注意到我把/user/.programname
而不是/home/user/.programname
为linux例子。固定。
答
通常,Windows上的程序的配置和数据文件会进入%APPDATA%目录(或应该),通常位于具有程序名称的子目录中。 “%APPDATA%”当然只是一个映射到当前用户的Application Data文件夹的环境变量。我不知道,如果它存在于Linux的(虽然我认为事实并非如此),所以做跨平台(Windows/Linux的/ MacOS的)...
import os
if 'APPDATA' in os.environ.keys():
envar = 'APPDATA'
else:
envar = 'HOME'
configpath = os.path.join(os.environ[envar], '.programname')
答
在Windows上,它存储在os.environ['APPDATA']
。但是,在Linux上,现在推荐将配置文件存储在os.environ['XDG_CONFIG_HOME']
中,默认为~/.config
。因此,例如,建立在JAB的例子:
if 'APPDATA' in os.environ:
confighome = os.environ['APPDATA']
elif 'XDG_CONFIG_HOME' in os.environ:
confighome = os.environ['XDG_CONFIG_HOME']
else:
confighome = os.path.join(os.environ['HOME'], '.config')
configpath = os.path.join(confighome, 'programname')
的XDG基本目录标准的创建,这样的配置可以全部放在一个地方而不会弄乱点文件的主目录。大多数新的Linux应用程序支持它。
“哪个有点丑陋[。]”虽然工作得很好。 – JAB 2010-07-14 20:39:54