从python中的操作系统独立位置加载配置文件

时间:2010-07-14 20:24:18

标签: python windows linux

在Linux下我把我的配置放在“〜/ .programname”中。我应该把它放在窗户里? 在python中独立打开配置文件操作系统的推荐方法是什么?

谢谢! 森

5 个答案:

答案 0 :(得分:9)

在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基本目录标准,以便可以将配置全部保存在一个位置,而不会使用dotfiles混乱主目录。大多数新的Linux应用都支持它。

答案 1 :(得分:4)

尝试:

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:哦,哇,我刚注意到我为linux示例添加了/user/.programname而不是/home/user/.programname。固定的。

答案 2 :(得分:1)

LeadStorm's great answer的一些改进:

使用os.environ.get()并使or短路可以使代码更简单:

configpath = os.path.join(
    os.environ.get('APPDATA') or
    os.environ.get('XDG_CONFIG_HOME') or
    os.path.join(os.environ['HOME'], '.config'),
    "programname"
)

此外,如果您愿意使用外部库,xdg package可以使Linux和Mac上的事情变得更加轻松:

import xdg.BaseDirectory as xdg
configpath = os.path.join(os.environ.get('APPDATA') or xdg.xdg_config_home,
                          "programname")

但这只能解决部分问题:如果该目录不存在,您仍然需要创建,对吧?

在Windows上,您是一个人。但是在Linux和Mac上,xdg.save_config_path()为您执行os.path.join()创建具有适当权限的目录,如果需要,返回其路径,一步之遥。太棒了!

if 'APPDATA' in os.environ:
    configpath = os.path.join(os.environ['APPDATA'], "programname")
    os.makedirs(configpath, exist_ok=True)
else:
    configpath = xdg.save_config_path("programname")

答案 3 :(得分:0)

通常,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')

答案 4 :(得分:0)

使用Python的Pathlib库时的方法:

config = environ.get('APPDATA') or environ.get('XDG_CONFIG_HOME')
config = Path(config) if config else Path.home() / ".config"