gpt4 book ai didi

python - 无法使用子目录中的 ConfigParser 加载相关配置文件

转载 作者:IT老高 更新时间:2023-10-28 20:45:41 35 4
gpt4 key购买 nike

我的目录结构如下:

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.dirname(__file__), 'conf', 'config.cfg'))

解释:每个程序(模块)的 __file__ 变量都包含它的路径(我猜可能是相对于加载时的当前目录—我在 Python 文档中找不到任何结论— , 例如当 foo.py 从它自己的目录导入时)。

这样,无论当前工作目录是什么,无论您将包放在哪里,导入都可以正常工作。

PS:旁注:__all__ = ["config.cfg"] 不是您想要的:它告诉 Python 在您执行 from conf 时要导入哪些符号(变量、函数)导入 *。它应该被删除。

PPS:如果代码在加载配置读取模块和读取配置文件之间更改了当前工作目录,那么您要首先存储您的 absolute 路径更改当前目录之前的配置文件(带有 os.path.abspath()),以便即使在当前目录更改之后也可以找到配置。

关于python - 无法使用子目录中的 ConfigParser 加载相关配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13800515/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com