应执行python -m ensurepip --default-pip --upgrade重建pip;若权限不足则加--user;手动编译python时需配置./configure --with-ensurepip=install。

pip命令报错ModuleNotFoundError: No module named '_ensurepip'
这是Python标准库缺失_ensurepip模块的典型表现,常见于手动编译安装Python时没启用--with-ensurepip,或系统Python被精简(如某些Docker镜像、Alpine Linux)。它不是pip损坏,而是pip根本没被安装进Python环境。
修复思路很直接:让Python自己重新安装pip。但必须满足一个前提——你的Python可执行文件能跑起来,且sys.executable指向的是目标Python解释器。
- 先确认Python版本:
python -c "import sys; print(sys.version)",确保不是调到了系统其他Python - 检查
_ensurepip是否真不可用:python -c "import _ensurepip",报错就说明缺失 - 不要尝试用
get-pip.py硬装——如果_ensurepip都不存在,get-pip.py大概率会因缺少ssl或zlib依赖而失败
用python -m ensurepip重建pip(推荐方案)
这是最干净、最符合Python设计意图的方式。ensurepip是Python 3.4+内置模块,只要Python编译时带了基础依赖(zlib、ssl),它就能拉取并安装pip和setuptools。
执行前注意两点:一是加--default-pip参数,否则只装pip不设为默认;二是建议加--upgrade,避免旧版pip自带bug。
- 基础命令:
python -m ensurepip --default-pip --upgrade - 如果提示
PermissionError(比如装在/usr/local下),加--user装到用户目录:python -m ensurepip --user --default-pip --upgrade - 装完立刻验证:
python -m pip --version,别只跑pip --version——后者可能还是旧shell缓存的路径
手动编译Python时如何避免这个问题
如果你是从源码编译Python(比如./configure && make && make install),那_ensurepip默认是关闭的。这不是bug,是编译选项控制的行为。
关键就在./configure阶段。不加任何参数的话,ensurepip不会被启用,哪怕你后续有openssl-dev和zlib-dev也白搭。
- 正确做法:编译前确保装好
openssl-dev和zlib1g-dev(Ubuntu/Debian)或openssl-devel和zlib-devel(CentOS/RHEL) - 然后运行:
./configure --with-ensurepip=install(推荐)或--with-ensurepip=yes -
=install表示编译完自动运行ensurepip,比=yes更省心;=no就是彻底禁用
为什么get-pip.py经常失败,什么时候能用
get-pip.py本质是绕过_ensurepip,用纯Python脚本下载安装pip。但它极度依赖网络、SSL证书、以及urllib.request的完整功能。很多精简环境里它一跑就卡在ImportError: cannot import name 'HTTPSHandler'。
它只适合两类场景:一是你确定Python已完整支持SSL和网络(比如macOS官方pkg、Windows installer);二是你愿意手动补依赖(比如在Alpine上先apk add ca-certificates再update-ca-certificates)。
- 最小可用条件:
python -c "import ssl, urllib.request"不报错 - 若失败,错误里出现
ssl.SSLError或URLError,基本可以放弃这条路 - 临时救急可试:
curl https://bootstrap.pypa.io/get-pip.py | python,但依然逃不开SSL依赖
真正麻烦的不是重建pip,而是重建后pip命令仍找不到——这通常是因为PATH没更新,或者shell缓存了旧的pip路径。运行hash -d pip(bash/zsh)或重启终端,比反复重装更有效。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











