Python3.10执行pip命令报cannot import name Mapping错误解决方法
故障原因
- Python 3.10 已正式移除
collections模块下的Mapping等容器抽象基类,这类对象早在Python 3.3版本就被迁移到collections.abc子模块,版本过旧的urllib3未做跨版本兼容判断,就会触发ImportError: cannot import name 'Mapping' from 'collections'报错。 - 手动删除pip内置_vendor目录下的urllib3文件夹直接破坏了pip的依赖完整性,pip启动时找不到内置依赖就会抛出
ModuleNotFoundError: No module named 'pip._vendor.urllib3',此时pip本身已损坏,无法通过自带的pip命令完成自修复。
注意:不要直接手动删除pip安装目录下_vendor文件夹内的任何文件,该目录存放pip运行的内置依赖,手动删除会直接导致pip完全失效,无法通过pip命令完成自修复。
修复步骤
优先方案:通过ensurepip重置pip(操作最简单,成功率最高)
- 打开命令行终端,Windows环境执行以下命令,强制重装和当前Python3.10版本匹配的官方默认pip:
py -3.10 -m ensurepip --upgrade
Linux/macOS环境替换为对应命令:
python3.10 -m ensurepip --upgrade
- 命令执行完成后,验证pip基础功能是否恢复:
py -3.10 -m pip --version
- 功能恢复后,将pip和urllib3升级到完全兼容Python3.10的最新版本,避免后续再触发同类导入错误:
py -3.10 -m pip install --upgrade pip urllib3
备选方案:手动补全损坏的vendor依赖
如果ensurepip执行报错无法使用,按以下步骤手动修复:
- 定位本机Python3.10的pip vendor目录,常见默认路径如下:
- Windows:
C:\Users\【你的系统用户名】\AppData\Local\Programs\Python\Python310\Lib\site-packages\pip\_vendor\ - Linux:系统级路径为
/usr/lib/python3.10/site-packages/pip/_vendor/,用户级路径为~/.local/lib/python3.10/site-packages/pip/_vendor/ - macOS:官方安装包路径为
/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/pip/_vendor/
- Windows:
- 获取完整的适配Python3.10版本的urllib3文件夹,放到上述_vendor目录下:可以从其他同版本正常运行的Python3.10环境的同路径直接复制,也可以下载对应版本的pip离线安装包,解压后提取
pip/_vendor/路径下的urllib3文件夹。 - 文件放置完成后,执行
py -3.10 -m pip list验证功能是否正常。
临时修复方法(仅应急使用)
如果暂时无法重置pip,且已经补全了urllib3的文件,可以找到报错的selectors.py文件,将头部的导入行from collections import Mapping替换为兼容写法:
try: from collections.abc import Mapping except ImportError: from collections import Mapping
该方法仅能临时解决导入报错,长期使用建议直接重置pip到最新兼容版本。
内容的提问来源于stack exchange,提问作者ahmed barbary
相关产品推荐
相关产品推荐

