在Faust(Kafka流处理)中无法从env.ini读取configparser环境变量
解决读取env.ini时的KeyError问题
问题场景
你的FastAPI项目结构如下:
- project - app - kafka_layer - faustworker.py - core - configs.py - env.ini
env.ini内容:
[DEFAULT] DATABASE_URL=url_to_db
configs.py代码:
import configparser config = configparser.ConfigParser() config.read("env.ini")
在faustworker.py中尝试读取配置:
from app.core.configs import config db_url = config['DEFAULT']['DATABASE_URL']
运行时抛出错误:KeyError: 'DATABASE_URL'
问题原因
config.read("env.ini")使用的是相对路径,当启动faustworker.py时,程序的工作目录是project/app/kafka_layer/,而env.ini在项目根目录project/下,导致配置文件未被正确读取,config对象中没有对应的键值对,因此触发KeyError。
解决方案
改用绝对路径读取env.ini,借助pathlib模块获取文件的绝对路径,保证无论从哪个目录启动程序,都能找到配置文件。
修改configs.py代码如下:
import configparser from pathlib import Path # 获取当前文件(configs.py)所在目录的上级目录(即项目根目录) BASE_DIR = Path(__file__).parent.parent.parent env_path = BASE_DIR / "env.ini" config = configparser.ConfigParser() config.read(env_path)
路径说明
Path(__file__):获取configs.py的绝对路径.parent:依次向上跳转目录,最终得到项目根目录project/BASE_DIR / "env.ini":拼接得到project/env.ini的绝对路径
修改后,无论从哪个目录启动faustworker.py,都能正确读取到env.ini里的配置,不会再出现KeyError。
内容的提问来源于stack exchange,提问作者Raheel Siddiqui
相关产品推荐
相关产品推荐

