安装cbpro引发依赖冲突、flask启动报错如何解决?
问题根因
- 你安装的1.1.4版本
cbpro库已停止维护多年,安装时会强制降级两个核心基础依赖到2017年的旧版本:requests==2.13.0、six==1.10.0 - 当前环境运行的是Python 3.10+,旧版requests完全不兼容这个Python版本:Python 3.10开始将
MutableMapping等抽象基类从collections模块迁移到了collections.abc下,旧版requests直接调用collections.MutableMapping就会触发你看到的AttributeError - 被强制降级的requests和six同时会破坏CS50环境内置的
check50、submit50、uplink等工具,这些工具都要求更高版本的基础依赖,这也是你安装时看到一堆依赖冲突提示的原因。
修复步骤
先恢复被破坏的基础环境
执行下面的命令,把被降级的依赖装回兼容的新版本,先解决Flask启动报错和CS50工具失效的问题:pip install --force-reinstall requests>=2.28.0 six>=1.16.0跑完这步可以先试下
flask run,如果不再报collections相关的AttributeError,说明基础环境已经恢复正常。解决cbpro的依赖兼容问题,二选一即可
- 方案一(推荐,零代码改动):安装社区维护的兼容版cbpro
原版cbpro已经停更,社区维护的兼容分叉版本完全保留了原库的所有接口,适配了新版Python和新依赖,不会触发版本冲突,直接安装即可:
装完不需要修改你代码里任何pip install cbpro-notdeadimport cbpro的逻辑,原有调用方式完全不变。 - 方案二(临时补丁方案):手动给旧版依赖打兼容补丁
如果一定要用原版1.1.4的cbpro,在你项目app.py的最顶部,所有import语句之前加两行兼容映射代码,绕过Python版本兼容问题:
这个方案只是临时绕过报错,后续使用中大概率还会碰到其他兼容问题,优先用方案一。import collections import collections.abc collections.MutableMapping = collections.abc.MutableMapping
- 方案一(推荐,零代码改动):安装社区维护的兼容版cbpro
验证结果
重新执行flask run,服务能正常启动无报错,同时check50/submit50等CS50工具可以正常运行,就说明修复完成。
注意事项
- 之前执行
pip install uplink解决不了问题,报错根源是cbpro强制降级基础依赖,和uplink本身无关 - 安装第三方库时如果pip弹出基础依赖(requests、six、urllib3这类大量包依赖的库)的冲突提示,不要直接忽略,强制降级这类库大概率会搞坏整个运行环境
- Python3.10及以上版本不要用2020年之前停止维护的、锁定旧版基础依赖的库,很容易出现兼容问题
内容的提问来源于stack exchange,提问作者Luiz Lacerda
相关产品推荐
相关产品推荐

