Python3.10 PyCharm环境安装cbpro后多项目出现collections相关报错
报错原因
该问题由Python版本与依赖包版本不兼容导致:
- Python 3.3开始就将
collections.MutableMapping这类抽象基类迁移到了collections.abc子模块下,Python 3.10及以上版本直接移除了collections模块下对这些类的别名兼容 - 你安装的
cbpro模块已停止维护多年,它的依赖声明里强制要求使用非常老旧版本的requests(通常是2.13.0及以下版本),这些老版本requests还在使用已被高版本Python移除的collections.MutableMapping调用,因此触发报错 - 安装cbpro时pip会自动降级你的全局requests版本,所以原本正常运行的其他依赖高版本requests的项目也会跟着报错
永久解决方案
按推荐优先级排序如下:
- 方案1:使用cbpro的官方替代库
Coinbase官方现在已经推出了新版Python SDKcoinbase-advanced,完全替代停止维护的cbpro,兼容Python3.10+及新版requests,安装命令:pip install coinbase-advanced,对应调整你原有cbpro相关的调用逻辑即可,完全满足对接Coinbase API的需求 - 方案2:虚拟环境隔离
如果你必须使用原版cbpro,不要在全局Python环境安装,为cbpro项目单独创建虚拟环境,虚拟环境内安装Python3.9及以下版本(Python3.9还保留了collections下的别名兼容),单独安装cbpro及对应依赖,不会影响全局其他项目的运行 - 方案3:手动修复兼容(仅临时使用,不推荐)
如果既不想换SDK也不想装低版本Python,可以手动修改报错的requests源码文件:
找到/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/requests/cookies.py,将第174行的collections.MutableMapping改为collections.abc.MutableMapping,同目录下的其他requests文件如果出现同类报错也按这个规则修改即可。该修改为临时方案,重装requests就会失效。
内容的提问来源于stack exchange,提问作者Andrew M
相关产品推荐
相关产品推荐

