问题
今天配置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.