没有名为zlib的模块

82 投票
9 回答
200123 浏览
提问于 2025-04-16 18:34

首先,请耐心听我说。我很难把我的问题告诉别人,而且这个帖子有点长……

我在Ubuntu 10.10上使用pythonbrew来运行多个版本的Python。关于如何安装pythonbrew和它的工作原理,请参考下面这个链接:

http://www.howopensource.com/2011/05/how-to-install-and-manage-different-versions-of-python-in-linux/

在阅读了几个StackOverflow的帖子后,我终于在这个目录下找到了一个叫Setup的文件:~/.pythonbrew/pythons/Python-2.7.1/lib/python2.7/config

In this Setup file I see 
# Andrew Kuchling's zlib module.
# This require zlib 1.1.3 (or later).
# See http://www.gzip.org/zlib/
# zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz

我把最后一行的注释去掉了,然后又运行了python -v。可是,当我尝试import zlib时,还是收到了同样的错误,所以我想我得做点什么,把zlib安装到库里。

但是我不知道该怎么做。有人能指引我一下吗??非常感谢!

我这样做是因为我想在我创建的不同虚拟环境中使用不同版本的Python。当我执行virtualenv -p python2.7时,出现了没有名为zlib的模块的错误。

jwxie518@jwxie518-P5E-VM-DO:~$ virtualenv -p python2.7 --no-site-packages testenv

Running virtualenv with interpreter /home/jwxie518/.pythonbrew/pythons/Python-2.7.1/bin/python2.7

Traceback (most recent call last):
  File "/usr/local/lib/python2.6/dist-packages/virtualenv.py", line 17, in <module>
    import zlib

ImportError: No module named zlib

编辑

我必须通过添加--force来安装2.7.1。

我在开发Django,需要一些缺失的模块,比如sqlite3,而且创建我的虚拟环境时,我肯定需要zlib。如果我只是使用系统默认的版本(2.6.6),就没有问题。

要用系统默认版本做到这一点,我只需要做:

virtualenv --no-site-packages testenv

谢谢!


(第二次编辑)

我也安装了3.2,并且测试没有问题,所以我想我的问题就是如何安装缺失的模块。

jwxie518@jwxie518-P5E-VM-DO:~$ virtualenv -p python3.2  testenv
Running virtualenv with interpreter /home/jwxie518/.pythonbrew/pythons/Python-3.2/bin/python3.2
New python executable in testenv/bin/python3.2
Also creating executable in testenv/bin/python
Installing distribute..................................................................................................................................................................................................................................................................................................................................done.
Installing pip...............done.
jwxie518@jwxie518-P5E-VM-DO:~$ virtualenv -p python3.2 --no-site-packages testenv
Running virtualenv with interpreter /home/jwxie518/.pythonbrew/pythons/Python-3.2/bin/python3.2
New python executable in testenv/bin/python3.2
Also creating executable in testenv/bin/python
Installing distribute..................................................................................................................................................................................................................................................................................................................................done.
Installing pip...............done.

9 个回答

29

在我遇到的这个情况中,我发现编译后缺少了一些模块。所以我做了以下几步:

  1. 安装 zlib-devel 这个软件包。
  2. 重新编译并安装 Python。
31

默认情况下,当你配置Python源代码时,zlib模块是禁用的。你可以在配置时使用--with-zlib这个选项来启用它。这样就可以了。

./configure --with-zlib
63

听起来你需要安装zlib的开发包,可能需要做一些类似下面的操作:

# ubuntu 12,14,16,18,20.04+
sudo apt-get install zlib1g-dev

与其使用python-brew,你可能更想手动编译,这其实并不难。只需下载源代码,然后依次运行 configuremakemake install。你至少要设置 --prefix,这样它就会安装到你想要的位置。

./configure --prefix=/opt/python2.7 + other options
make
make install

你可以通过运行 ./configure --help 来查看可用的配置选项,并通过以下命令查看你的系统Python是如何编译的:

python -c "import sysconfig; print sysconfig.get_config_var('CONFIG_ARGS')"

关键是确保你的系统上安装了开发包,这样Python才能构建 zlibsqlite3 等模块。Python的文档对构建过程有更详细的说明:http://docs.python.org/using/unix.html#building-python

撰写回答