zipimport.ZipImportError: can‘t decompress data; zlib not available 解决

文章描述了一位用户在配置个人Python3环境时遇到zlib模块缺失的问题。他们选择下载python3.6-minimal的deb包,解压后将bin目录内容移到个人目录,并修改pip3命令脚本的shebang以指向新环境。这种方法避免了重新编译Python3或影响系统全局环境。同时,文章提到检查python二进制文件是否包含zlib模块的技巧。
摘要由CSDN通过智能技术生成

问题

今天配置pip3 出现这个问题,执行python3

import pip

可以复现此问题
由于机器是共享的,我不能破坏系统的python环境,所以决定在个人用户下配置一套python3环境

解决方案

apt download python3.6-minimal
dpkg -x python3.6-minimal_3.6.9-1\~18.04ubuntu1.12_amd64.deb tmp

下载deb包后解压目录,然后将其bin目录下的二进制内容移动到用户目录下的~/.local/bin/
相对路径执行python3.6

$ ./python3.6
Python 3.6.9 (default, Mar 10 2023, 16:46:00) 
[GCC 8.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pip
>>> import zlib
>>> 

修改 pip3 命令脚本的shebang:

#!/home/xxxxx/.local/bin/python3

让其pip3调用到本机安装的python环境即可

原因

看到一些文章说安装如下依赖:

sudo apt install zlib1g-dev

不过这并没有解决我的问题,原因在于python3是已经编译好的,缺失zlib module,就算再次补全相关依赖,在不重新编译的条件下依然会提示缺少zlib问题
所以一种是重新编译python3, 或者直接使用如上官方源中下载python3(其包含zlib内建module)

如果你可以修改系统配置,建议直接重新安装 python3.6-minimal 即可

其他

可以通过strings命令查看是否包含zlib 内建 module
不包含zlib情况:

$ strings  /usr/bin/python3.6 |grep zlib
zlib
# zipimport: zlib %s
can't decompress data; zlib not available
importing_zlib
importing_zlib.14253

包含zlib情况:

$ strings  /usr/bin/python3.6|grep zlib
zlibVersion
PyInit_zlib
zlib.error
zlib
# zipimport: zlib %s
zlib.Decompress
zlib.Compress
can't decompress data; zlib not available
    +9 to +15: The base-two logarithm of the window size.  Include a zlib
flush($self, length=zlib.DEF_BUF_SIZE, /)
flush($self, mode=zlib.Z_FINISH, /)
zlib library, which is based on GNU zip.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hello_wshuo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值