没有找到名为zlib的模块

81

首先,请耐心等待。我很难向他人描述我的问题,这是一个很长的帖子...

我在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到lib中的操作。

但是我不知道我需要做什么。有人可以指导我吗?非常感谢!

我这样做是因为我想在我创建的不同虚拟环境中使用不同版本的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。如果我只使用系统默认的 Python(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.

我认为3.2是不必要的。我刚刚删除了那些内容,很抱歉。我能够使用3.2创建虚拟环境,但无法使用2.7.1。 - CppLearner
9个回答

60

听起来你需要安装zlib的devel包,可能需要执行如下操作:

# 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文档在此处更详细地介绍了构建过程。


嗨。我现在会继续查看其余部分。但是我刚刚尝试安装zlib1g-dev,但似乎我已经安装了它(我尝试了一些其他命令,如-f install)。zlib1g-dev已经是最新版本。zlib1g-dev设置为手动安装。 - CppLearner
到目前为止,我已经得到了良好的结果。我能够使用Pythonbrew创建2.7.1的环境。测试完成后,我会将其作为答案返回。谢谢!!! - CppLearner
1
在Ubuntu上,您可以通过运行sudo apt-get build-dep python和/或sudo apt-get build-dep python3来安装所有Python构建依赖项。 - Theron Luhn
4
更正:sudo apt-get build-dep python2.7sudo apt-get build-dep python3.4 - Theron Luhn
2
在CentOS 7中使用$sudo yum install zlib-devel。 - Andrew Kloos
在osX上遇到了同样的问题,怎么解决呢?由于无法使用apt-get install xxx安装zlib。 - Shawn Zhang

30

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

./configure --with-zlib

4
公正地讲,Python的 configure 曾经提供了一个 --with-zlib 标记;然而,很长一段时间以来它已经不再提供该标记了。 - smcphill
4
无法在2.7.6版本中正常工作,我收到了“configure: WARNING: unrecognized options: --with-zlib”的警告信息。 - Pawel Miech
2
无法在Python 3.2.5上工作->在此处找到有效答案:https://dev59.com/nWct5IYBdhLWcg3wHJzF#15013895 - gecco

27

针对我遇到的情况,我发现在执行make命令后缺少了一些模块。因此我采取了以下措施:

  1. 安装zlib-devel
  2. 重新编译并安装Python。

3
详细说明第一步骤-- 在CentOS中执行sudo yum install zlib-devel安装zlib-devel。 - J-Dizzle
1
成功了!我在Ubuntu 12.04下执行了 [sudo apt-get install zlib1g-dev],重新编译Python 2.7.10,现在它可以正常工作了。谢谢。 - JohnnyLinTW

10
在运行 configure 后,您可以按照以下步骤在文件 Modules/Setup 中更改配置选项:
zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz

或者您可以按原样取消注释zlib行。


这是我在Ubuntu 13.10上构建Python2.2时找到的唯一有效方法。致敬... - Danimal
还需要适用于Python 2.6的版本。 - spookylukey
相关链接:https://dev59.com/nWct5IYBdhLWcg3wHJzF - minghua

4

我在TensorFlow安装指南中按照描述创建虚拟环境(venv)时遇到了很多问题。

这篇帖子列出的大多数命令也没有帮助我,所以如果你也遇到同样的情况,这就是我所做的:

  1. pip3 install --user pipenv
  2. pip install virtualenv

安装创建虚拟环境所需的依赖项

  1. mkdir myenv

创建一个名为myenv的新目录,但你可以随意更改名称,例如mynewenv

  1. cd myenv

或者你可以根据你的目录名称进行更改:cd [your_directory_name]

  1. virtualenv -p /usr/bin/python3 venv
在文件夹myenv中创建名为venv的虚拟环境。您可以随意命名你的虚拟环境,例如:virtualenv [v_env_name]。
  1. source ./venv/bin/activate
激活虚拟环境。请注意,如果您选择了不同的虚拟环境名称,则应相应地编写命令,例如:source ./[v_env_name]/bin/activate
  1. deactivate
停用虚拟环境。
注意:我正在使用Python 3.6.6和Ubuntu 18.04。 命令来源

3
安装缺失的zlib dev包后,您还可以使用pythonbrew卸载并重新安装所需版本的Python。看起来它会自动识别新包以使编译达到正确的能力。这种方式让您可以继续使用pythonbrew而不必自己进行编译(虽然这并不难)。请注意,保留HTML标记。

2

与CentOS或RHEL运行的答案类似,可以执行以下命令:

sudo yum install zlib-devel

这里展示的--with-zlib解决方案似乎缺少Python 3.9及以上版本需要链接的头文件(在我的情况中)。


0

我找到的最简单的解决方案,可以在python.org devguide上找到:

sudo apt-get build-dep python3.6

如果该软件包在您的系统中不可用,请尝试降低其次版本,直到找到一个在您的系统软件包管理器中可用的软件包。
我在我的博客上尝试解释了细节。

-1

我的目标是在Ubuntu的命令行中创建一个新的Django项目,就像这样:

django-admin.py startproject mysite

我已经安装了Python 2.7.5。但是我遇到了这个错误:

ImportError: No module named zlib

经过几个小时的努力,我终于找到了解决方案!
这里有一个解决方案链接 -

http://doc.biblissima-condorcet.fr/loris-setup-guide-ubuntu-debian

我按照第1.1节的指示执行了操作,一切都完美运行!这是一个简单的解决方案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接