编译Python3.6源码遇zlib.h缺失错误,无root权限如何解决?
解决无root权限下编译Python3.6缺少zlib.h的问题
搞定这个问题不难!首先得提一句:直接跳过zlib模块真的不建议——Python好多核心功能(比如用pip安装压缩格式的包、用zipfile模块处理压缩文件)都依赖它,跳过之后这些功能直接失效。不过如果实在没办法,也有对应的方案,先给你说最优解:自己编译zlib到个人目录,再让Python编译时链接它,步骤如下:
步骤1:手动编译安装zlib到用户目录
- 先下载和Python3.6兼容的zlib源码(推荐1.2.11版本),用命令行的话可以这样:
wget https://zlib.net/fossils/zlib-1.2.11.tar.gz tar -xzf zlib-1.2.11.tar.gz cd zlib-1.2.11 - 配置并编译安装到个人专属目录(比如
~/local/zlib,这个路径可以自己改):./configure --prefix=$HOME/local/zlib make && make install
步骤2:重新配置Python3.6的编译参数
- 回到Python3.6的源码目录,先清理之前的编译残留文件:
make distclean - 配置Python编译参数,指定刚才安装的zlib路径,同时把Python安装到个人目录(避免权限问题):
./configure --prefix=$HOME/local/python3.6 --with-zlib=$HOME/local/zlib - 最后编译安装Python:
make && make install
(不推荐)如果一定要跳过zlib模块
如果实在不想折腾编译zlib,也可以通过修改Python源码的配置文件来跳过它,但请务必注意:这样做会导致很多Python功能无法使用:
- 打开Python源码目录下的
Modules/Setup文件 - 找到下面这一行,在开头加上
#把它注释掉:# zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz - 保存文件后,重新运行
make && make install即可完成编译
内容的提问来源于stack exchange,提问作者Ankur S




