根本原因是python编译时未启用zlib支持,导致内置zlib模块缺失;需先安装zlib1g-dev(ubuntu/debian)或zlib-devel(centos/rhel/fedora),再重新执行./configure && make && make install,确保configure输出显示“zlib enabled”及头文件被正确检测到。

这不是 pip 本身的问题,而是 Python 编译时缺 zlib 开发支持,导致 zlib 模块根本没被编译进去。
为什么执行 python get-pip.py 会报 zipimport.ZipImportError: can't decompress data; zlib not available
Python 在启动时要解压 get-pip.py(它是个 zip 格式脚本),这个过程依赖内置的 zlib 模块。如果源码编译 Python 时没启用 zlib 支持,import zlib 就会失败,进而整个 zip 解包流程崩掉——所以你看到的不是 pip 安装失败,是 Python 连最基础的压缩能力都没有。
- 现象不是“pip 找不到”,而是
ModuleNotFoundError: No module named 'zlib'或直接卡在zipimport阶段 - 运行
python -c "import zlib"会立刻报错,这是最简单的验证方式 - 哪怕系统已装
zlib1g(运行时库),也不够;必须有zlib1g-dev(头文件 + pkgconfig)
Ubuntu/Debian 系统下必须装 zlib1g-dev,不是 zlib1g
zlib1g 是运行时共享库,只够程序运行;而 Python 源码编译需要 zlib.h、libz.a 和 pkg-config zlib 信息,这些全在 zlib1g-dev 包里。
- 执行:
sudo apt install zlib1g-dev - 装完后进 Python 源码目录,**必须重新运行**:
./configure && make && sudo make install - 注意:
./configure这一步会检测zlib.h是否可访问,如果没装-dev包,它会静默跳过 zlib 模块编译,后续就必然出错 - 不要试图只改
Modules/Setup文件来“硬启” zlib——没头文件,make会直接在zlibmodule.o处报错
CentOS/RHEL/Fedora 对应装 zlib-devel
包名不同,但作用完全一致:提供编译 Python 所需的 zlib 头文件和静态链接支持。
- 执行:
sudo yum install zlib-devel(CentOS 7 / RHEL 7) - 或:
sudo dnf install zlib-devel(Fedora / RHEL 8+) - 同样,装完后必须回到 Python 源码目录重做
./configure && make && make install - 别信“装了
zlib就行”的说法——yum install zlib只装运行时库,对编译毫无帮助
重新编译前最容易忽略的一步:确认 configure 输出里有 zlib enabled
./configure 结束后,快速扫一眼终端最后几十行,重点找这句:
checking for zlib... yes checking for zlib version... 1.3.1 checking for zlib library... -lz checking for zlib headers... found in /usr/include
如果看到 zlib disabled 或 not found,说明开发包没装对、路径被污染、或者 PKG_CONFIG_PATH 没设好。此时 make 一定不会包含 zlib 模块,后面所有操作都是白忙。
真正的难点从来不在“怎么装 pip”,而在于 Python 自身是否具备解压能力——这个能力在编译那一刻就决定了,运行时无法补救。











