Home Assistant中toshiba-ac与solaredge插件的requests库冲突排查求助
问题概述
在Home Assistant环境中同时启用toshiba-ac和solaredge插件时触发报错:
requests.get() takes 1 positional argument but 2 were given
问题定位到solaredge库的get请求调用(对应库文件第55行及后续代码);移除toshiba-ac插件后,solaredge恢复正常。两者的依赖关系如下:
- solaredge:依赖
requests,未指定版本限制 - toshiba-ac:依赖toshiba-ac库,后者依赖azure-iot-device==2.9.0,该库限制
requests>=2.20.0,<3.0.0
当前requests最新版本为2.28.2,符合azure-iot-device的版本范围,但冲突仍存在。
排查方向
确认实际安装的依赖版本
进入Home Assistant的Python虚拟环境,执行pip freeze查看:- 当前实际安装的requests版本
- 是否存在其他依赖(如urllib3、chardet等requests的依赖库)的版本冲突,导致requests的API行为被间接修改
验证solaredge库的调用合法性
编写简单测试脚本,模拟solaredge库的get调用逻辑:import requests # 模拟solaredge的调用方式 requests.get("https://example.com", {"param": "value"}) # 对比标准调用方式 requests.get("https://example.com", params={"param": "value"})在单独安装solaredge、单独安装toshiba-ac+依赖、两者同时安装三种环境下执行测试,确认是否是调用方式不规范导致的参数错误。
检查azure-iot-device对requests的影响
单独安装azure-iot-device==2.9.0及对应的requests版本,测试requests.get的调用行为是否被修改,比如是否有 monkey-patch 改变了参数接收方式。
解决建议
锁定requests兼容版本
在Home Assistant的自定义配置中指定requests版本为2.27.x或更早的稳定版本(处于>=2.20.0,<3.0.0范围内),避免自动更新到可能触发冲突的版本。修复solaredge库的调用方式
如果排查确认是solaredge库的参数传递不规范(如将params作为位置参数而非关键字参数传入),可fork该库修改代码:
将类似requests.get(url, params)的代码改为requests.get(url, params=params),然后在Home Assistant中替换使用修改后的库。提交官方修复请求
将冲突场景、报错信息及排查结果提交到solaredge库的代码仓库,请求官方修复不符合requests规范的调用逻辑。临时替代方案
暂时无法解决冲突时,可根据使用需求切换启用其中一个插件,或寻找功能类似的替代插件。
内容的提问来源于stack exchange,提问作者Bart

