python – 无法使用ConfigParser从子目录加载相对配置文件

我有以下目录结构:

my_program/
       foo.py
       __init__.py # empty
       conf/
          config.cfg
          __init__.py 

在foo.py我有这个:

import sys 
#sys.path.append('conf/')
import ConfigParser

config = ConfigParser.ConfigParser()
config.read( 'conf/config.cfg' )

在conf / __ init__.py我有

__all__ = ["config.cfg"]

我在foo.py中得到这个错误,我可以通过给出完整的路径修复,但是当我只是放置conf / config.cfg但是我想要相对路径工作时,

ConfigParser.NoSectionError

这实际上意味着文件无法加载(因此无法读取该部分).

我尝试在foo.py中评论/取消评论sys.path.append(‘conf /’),但是它并没有做任何事情.

有任何想法吗?非常感谢.

路径是相对于当前工作目录,通常是运行程序的目录(但当前目录可以由程序[或模块]更改,而且通常不是程序文件的目录).

解决方案在于通过Python解释器在foo.py中为您创建的__file__变量自动计算文件的路径:

import os
config.read(os.path.join(os.path.abspath(os.path.dirname(__file__)), 'conf', 'config.cfg'))

说明:每个程序(模块)的__file__变量包含其路径(相对于当前目录加载时,我猜 – 我在Python文档中找不到任何结论).将其转换为绝对路径更好地处理模块在config.read()之前更改当前工作目录的一般情况,其中__file__是相对路径(例如,当foo.py从其自己的目录导入时).

这样,无论您现在的工作目录以及放置包装的任何位置,导入都能正常工作.

PS:旁注:__all__ = [“config.cfg”]不是你想要的:它告诉Python当你从conf导入*时,要导入什么符号(变量,函数).应该删除.

翻译自:https://stackoverflow.com/questions/13800515/cant-load-relative-config-file-using-configparser-from-sub-directory

转载注明原文:python – 无法使用ConfigParser从子目录加载相对配置文件