Python3.10安装Beautiful Soup后报collections无Callable属性如何解决?
报错原因
这个报错是Python版本和Beautiful Soup版本不兼容导致的:Python 3.3及以上版本已经将Callable、Iterable等抽象基类从collections模块迁移到了collections.abc子模块,Python 3.10正式删除了collections模块下这些类的旧别名。你当前使用的Beautiful Soup版本为较低的旧版本,内部仍然沿用了从collections导入Callable的旧写法,因此触发报错。
解决方案
按优先级从高到低选择即可:
方案1:升级Beautiful Soup到适配Python 3.10的最新版本
直接执行升级命令即可解决,这是最稳妥的处理方式:pip install --upgrade beautifulsoup4如果使用的是conda环境,执行:
conda update beautifulsoup4方案2:代码层临时打补丁兼容
如果当前项目有依赖限制不能升级Beautiful Soup版本,可以在导入bs4的代码之前添加补丁语句,手动给collections模块补全别名:import collections from collections import abc collections.Callable = abc.Callable # 如果后续还有其他同类报错(比如Iterable、Mapping等),按同样格式补全即可,示例: # collections.Iterable = abc.Iterable # collections.Mapping = abc.Mapping方案3:修改Beautiful Soup源码(不推荐,仅作临时应急)
找到本地安装的bs4包目录,打开报错对应的源文件,把所有from collections import xxx格式的导入语句,替换为from collections.abc import xxx即可。
内容的提问来源于stack exchange,提问作者Tan20211010
相关产品推荐
相关产品推荐

