You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python虚拟环境生产环境运行异常:读取配置报KeyError

问题分析与解决

报错KeyError: 'mqtt_broker'本质是config.read(config_file)未成功读取到config.ini文件,导致ConfigParser对象为空,无法定位到对应配置段。以下是核心原因及解决办法:

1. 相对路径导致配置文件找不到

脚本里用相对路径"config.ini"时,Python会从当前工作目录查找文件,而非脚本所在目录。你执行命令时,mqtt用户的工作目录大概率不是/etc/mqtt_kafka_bridge/venv/,因此找不到配置文件。

解决方法:用绝对路径读取配置

修改代码,通过脚本自身路径拼接配置文件的绝对路径,确保无论在哪运行都能定位到文件:

import configparser
import os

# 获取脚本所在目录的绝对路径
script_dir = os.path.dirname(os.path.abspath(__file__))
config_file = os.path.join(script_dir, "config.ini")

config = configparser.ConfigParser()
config.read(config_file)
mqtt_broker = config["mqtt_broker"]["address"]

2. 配置文件权限不足

mqtt用户可能没有读取config.ini的权限,导致文件无法加载。

解决方法:检查并修复权限

先查看文件权限:

ls -l /etc/mqtt_kafka_bridge/venv/config.ini

如果mqtt用户无读权限,执行以下命令修复:

# 给其他用户添加读权限
sudo chmod o+r /etc/mqtt_kafka_bridge/venv/config.ini
# 或者将文件所有者改为mqtt用户
sudo chown mqtt:mqtt /etc/mqtt_kafka_bridge/venv/config.ini

3. 额外验证:确认配置文件路径

可临时在代码中添加打印,验证实际读取路径和文件是否存在:

import os
config_file = "config.ini"
print(f"尝试读取配置文件路径: {os.path.abspath(config_file)}")
print(f"文件是否存在: {os.path.exists(config_file)}")

运行后能直接确认是否是路径问题。

内容的提问来源于stack exchange,提问作者ElToro1966

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 19:07:47