53

在 Ubuntu 12.04 上从源代码构建 Python 3.2.3 时,zlib 模块不可用。

我从 python.org 下载了官方源代码分发,并尝试使用以下命令构建和安装它。

tar xfa Python3.2.3.tar.bz2
cd Python-3.2.3
./configure --prefix=/opt/python3.2
make
sudo make install

make 命令输出包括以下内容。

Python build finished, but the necessary bits to build these modules were not found:
_curses            _curses_panel      _dbm            
_gdbm              _sqlite3           _ssl            
_tkinter           bz2                readline        
zlib                                            

运行make install并启动解释器后,zlib无法导入模块。

我确认该zlib1g-dev软件包已安装在我的系统上。

我还发现了这个类似的问题,它建议将--with-zlib标志添加到./configure命令中。但是,这会返回一个错误,即它是一个无法识别的选项并且没有效果。

4

10 回答 10

95

我在 CentOS 6.3 和 python 3.2.3 上遇到了类似的问题

我通过以下方式解决了它:

编辑/Modules/Setup并取消注释该行:

zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz

切换到目录 /Modules/zlib:

./configure
make
sudo make install

然后编译了我的 python3.2 源代码。

然后能够测试 import zlib 并且一切正常:)

于 2013-02-21T23:01:06.510 回答
19

我正在使用 CentOS 6.6 并收到 zlib 错误。此处提出的其他答案均不适合我(包括 CentOS 6.3 中取消注释模块/设置中的一行的修复)。我已经使用以下命令修复了它。

yum groupinstall "Development tools"
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel

然后配置和安装python如下:

./configure --prefix=/usr/local LDFLAGS="-Wl,-rpath /usr/local/lib"
make && make altinstall

我现在可以毫无问题地在 /usr/local/bin/python2.7 中导入 zlib。

这些说明根据此处找到的文章稍作修改。

于 2014-11-25T17:04:42.527 回答
17

解决方案是安装 Ubuntu 软件包dpkg-dev

sudo apt-get install dpkg-dev

原因在这里解释。

简而言之,最新版本的 Ubuntu 不会存储libz.so在标准/usr/lib位置,而是存储在特定于平台的位置。例如,在我的系统上是在/usr/lib/x86_64-linux-gnu. 这可以防止 Python 的构建系统找到它。

dpkg-dev包安装dpkg-architecture可执行文件,这使 Python 能够找到必要的库。

最初的问题是关于 Python 3.2.3。我还下载了 Python 2.7.3 并确认存在相同的问题,并且该解决方案也适用于它。

于 2012-09-10T03:16:14.477 回答
8

对于任何试图使用非系统/非标准zlib(例如从源代码构建自己的)的人,请确保同时传递CPPFLAGS(不是CFLAGS!)和LDFLAGSto ./configure。例如,如果您zlib/opt/zlib

./configure CPPFLAGS='-I/opt/zlib/include' LDFLAGS='-L/opt/zlib/lib'
make
sudo make install

我最终陷入了兔子洞,试图弄清楚为什么我们的 Python 没有在 zlib 支持下构建,并发现 CPythonsetup.py不查看CFLAGS包含目录,仅CPPFLAGShttps ://github.com/python/cpython/ blob/master/setup.py#L562

于 2019-01-31T21:16:17.630 回答
6

帮助我安装 python 3.5.1 的唯一解决方案是 apt-get zlib1g-dev(以及其他软件包,如 python-setuptools 和 python-pip),然后从源代码重建 python 3.5.1。

sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
sudo apt-get install build-essential python-dev python-setuptools python-pip python-smbus
sudo apt-get install build-essential libncursesw5-dev libgdbm-dev libc6-dev
sudo apt-get install zlib1g-dev libsqlite3-dev tk-dev
sudo apt-get install libssl-dev openssl
cd ~
mkdir build
cd build
wget https://www.python.org/ftp/python/3.5.1/Python-3.5.1.tgz
tar -zxvf Python-3.5.1.tgz
cd Python-3.5.1
./configure
make
sudo make install

取自:https ://github.com/MrYsLab/xideco/wiki/Installing-Python-3.5

正如我所理解的那样,新构建的 python 是包含以前 apt-getted 相关包的。因此,当您浏览新的 Python-3.5.1/lib/site-packages 的内容时,将会出现 pip 和 setuptools。更重要的是,它们将被复制到您使用 Python-3.5.1 制作的任何 virtualenv 中,并且此 virtualenv 将使用系统默认设置的 THEM。在安装新的 python 版本时,记住这一点非常非常重要。否则可能会陷入错误的黑洞,例如:

  • zlib 未安装;
  • “pip install ...”从 virtualenv 执行,将包安装到系统默认 python 而不是 virtualenv。
于 2016-04-11T18:34:19.680 回答
4

我在使用 MAC 时遇到了同样的错误

我的 MAC 操作系统版本

$ uname -v
Darwin Kernel Version 13.4.0: Sun Aug 17 19:50:11 PDT 2014; root:xnu-2422.115.4~1/RELEASE_X86_64

这里使用python3.4

问题)

  1. 使用 python3.4 时 zlib 不可用

    $ python3.4 get-pip.py Traceback(最近一次调用最后一次):文件“get-pip.py”,第 20204 行,在 main() 文件“get-pip.py”,第 152 行,在 main bootstrap(tmpdir =tmpdir) 文件“get-pip.py”,第 82 行,在 bootstrap import pip zipimport.ZipImportError: can't decompress data; zlib 不可用

  2. 重建 Python 失败

    ./configure --with-zlib-dir=/usr/local/lib

...配置:警告:无法识别的选项:--with-zlib-dir ...

解决方案

  1. 确保 zlib 已安装。默认情况下,它将安装在 /usr/lib

    ls /usr/lib/libz.*

如果没有安装,a. 下载并安装 i) 从 zlib.net 站点或 ii) 从 git repo 下载并安装,如下所示

git clone https://github.com/madler/zlib.git 

或 iii)。使用python源码目录Modules/zlib中的zlib源码

湾。安装 zlib

./configure --prefix=/usr/local
make
sudo make install 

2.通过取消注释“#zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz”下面的行来编辑/Module/Setup

3.再次从源代码重建Python3.4

cd ${PYTHON_SRC_CODE_DIR}  
./configure --prefix=${PYTHON_HOME_DIR}
make
sudo make install 

4.确认安装请注意gzip依赖zlib。

nbr_repeation=100
f=open("some_file.txt","at")
for line in range(nbr_repeation): 
    print('[{}] This file will be compressed using python zlib/gzipmodule'.format(line),file=f)

f.close()
f=open("some_file.txt","rt")
import gzip
gz=gzip.open('some_file.gz', 'wt') 
for line in f : gz.write(line)

gz.close() # Like to be clean exit
f.close()  # Like a clean exit

"""confirm the creation of the compressed gzip files"""
import os
print([ (file,os.stat(file)[6],"bytes") for file in os.listdir(".") if file.startswith("some")])
于 2015-02-16T22:16:15.930 回答
1
sudo apt-get install build-essential python-dev

即使 python-dev 是针对 python2.7 的,它仍然会引入所有必要的依赖项。

然后你需要做:

./configure
make
sudo make install

重建python3

于 2014-04-02T13:02:42.103 回答
1

我找到的最简单的解决方案是在python.org上:

sudo apt-get build-dep python3.6

如果该软件包不适用于您的系统,请尝试减少次要版本,直到您在系统的软件包管理器中找到可用的软件包。

如果您看到如下内容:E: You must put some ‘source’ URIs in your sources.list,打开软件和更新并启用源代码。

我尝试在博客文章中解释细节。

于 2016-12-30T17:18:09.290 回答
1

sudo apt-get install zlib1g-dev

对我有用。

于 2018-04-23T08:40:39.400 回答
0

对于在 macOS Mojave 上遇到相同错误的任何人,这是安装/链接头文件的最简单解决方案:

open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

然后像往常一样再次构建 Python(也适用于pyenv构建)。

于 2019-05-27T18:33:10.610 回答