WSL2 Ubuntu 20.04下pyenv安装3.9.0构建失败(zlib缺失)解决
pyenv/asdf编译安装Python 3.9.0 触发zlib相关报错解决
报错场景
在Ubuntu 20.04系统中,初次遇到该问题时通过搜索引擎检索未找到可直接落地的有效解决方案。完成pyenv初始化配置后,执行pyenv install -v 3.9.0命令安装指定版本Python时,会在编译收尾的ensurepip阶段终止流程;即使换用asdf版本管理工具执行相同的Python版本安装操作,也会复现完全一致的报错。
此前做的操作包括:
- 系统预装Python 3.8可被pyenv正常识别
- 为打通Python命令软链接,执行
sudo ln -s /usr/bin/python3 /usr/bin/python将系统自带python3路径映射为python命令 - 初步排查后已安装
zlib1g运行时依赖包,但安装流程仍未通过
完整报错堆栈如下:
Traceback (most recent call last): File "<frozen zipimport>", line 520, in _get_decompress_func ModuleNotFoundError: No module named 'zlib' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "<frozen zipimport>", line 568, in _get_data File "<frozen zipimport>", line 523, in _get_decompress_func zipimport.ZipImportError: can't decompress data; zlib not available During handling of the above exception, another exception occurred: Traceback (most recent call last): File "<string>", line 6, in <module> File "/tmp/python-build.20201212114143.1082/Python-3.9.0/Lib/runpy.py", line 206, in run_module mod_name, mod_spec, code = _get_module_details(mod_name) File "/tmp/python-build.20201212114143.1082/Python-3.9.0/Lib/runpy.py", line 147, in _get_module_details return _get_module_details(pkg_main_name, error) File "/tmp/python-build.20201212114143.1082/Python-3.9.0/Lib/runpy.py", line 111, in _get_module_details __import__(pkg_name) File "<frozen zipimport>", line 241, in load_module File "<frozen zipimport>", line 709, in _get_module_code File "<frozen zipimport>", line 570, in _get_data zipimport.ZipImportError: can't decompress data; zlib not available Traceback (most recent call last): File "/tmp/python-build.20201212114143.1082/Python-3.9.0/Lib/runpy.py", line 197, in _run_module_as_main return _run_code(code, main_globals, None, File "/tmp/python-build.20201212114143.1082/Python-3.9.0/Lib/runpy.py", line 87, in _run_code exec(code, run_globals) File "/tmp/python-build.20201212114143.1082/Python-3.9.0/Lib/ensurepip/__main__.py", line 5, in <module> sys.exit(ensurepip._main()) File "/tmp/python-build.20201212114143.1082/Python-3.9.0/Lib/ensurepip/__init__.py", line 210, in _main return _bootstrap( File "/tmp/python-build.20201212114143.1082/Python-3.9.0/Lib/ensurepip/__init__.py", line 129, in _bootstrap return _run_pip(args + [p[0] for p in _PROJECTS], additional_paths) File "/tmp/python-build.20201212114143.1082/Python-3.9.0/Lib/ensurepip/__init__.py", line 38, in _run_pip return subprocess.run([sys.executable, "-c", code], check=True).returncode File "/tmp/python-build.20201212114143.1082/Python-3.9.0/Lib/subprocess.py", line 524, in run raise CalledProcessError(retcode, process.args, subprocess.CalledProcessError: Command '['/tmp/python-build.20201212114143.1082/Python-3.9.0/python', '-c', '\nimport runpy\nimport sys\nsys.path = [\'/tmp/tmpk898xfhs/setuptools-49.2.1-py3-none-any.whl\', \'/tmp/tmpk898xfhs/pip-20.2.3-py2.py3-none-any.whl\'] + sys.path\nsys.argv[1:] = [\'install\', \'--no-cache-dir\', \'--no-index\', \'--find-links\', \'/tmp/tmpk898xfhs\', \'--root\', \'/\', \'--upgrade\', \'setuptools\', \'pip\']\nrunpy.run_module("pip", run_name="__main__", alter_sys=True)\n']' returned non-zero exit status 1. make: *** [Makefile:1254: install] Error 1
问题根因
zlib1g包仅提供程序运行时需要的zlib动态链接库,不包含源码编译阶段必需的zlib开发头文件。Python源码编译过程中,需要读取zlib的头文件、链接对应动态库才能完成内置zlib模块的构建;缺少开发包时,Python无法集成zlib解压能力,后续读取内置wheels包、引导pip安装的全流程都会触发连锁报错。
解决步骤
- 安装缺失的zlib开发依赖包:
sudo apt install zlib1g-dev
- 依赖安装完成后,重新执行原来的Python版本安装命令,即可正常完成全流程编译。
内容的提问来源于stack exchange,提问作者INuke
相关产品推荐
相关产品推荐

