ImportError:Python 2.7.2没有名为bz2的模块

我在Ubuntu 11.10上使用Python 2.7.2。 导入bz2模块时出现此错误:

ImportError: No module named bz2

我以为bz2模块应该是用Python 2.7来的。 我该如何解决这个问题?

编辑:我想我以前通过从源代码编译安装Python 2.7.2。 可能在那个时候,我没有libbz2-dev,所以bz2模块没有安装。 现在,我希望能够通过Python2.7来安装

 sudo apt-get install python2.7 

但它会说它已经安装。 有没有办法卸载以前的Python2.7安装并重新安装?

好的,在答案中这更容易理解,所以我将把我在评论中写的这个答案移到这个答案中。

幸运的是,你没有覆盖Python的系统版本,因为Ubuntu 11.10预装了2.7.2。

你的python二进制文件( pythonpython2.7 )位于/usr/local/bin目录中,这是一个通常安装用户特定的东西的目录。 这很好,这意味着你的系统python仍然存在。

首先,试着运行系统python。 从命令行input:

 /usr/bin/python -c "import bz2; print bz2.__doc__" 

这应该打印出这样的东西:

 λ > /usr/bin/python -c "import bz2; print bz2.__doc__" The python bz2 module provides a comprehensive interface for the bz2 compression library. It implements a complete file interface, one shot (de)compression functions, and types for sequential (de)compression. 

如果是这样,意味着你很好。

所以你只需要修复你的PATH ,它告诉shell在哪里find命令。 /usr/local/bin将优先于/usr/local ,所以有一些方法可以解决这个问题,以便于/烦恼/改变你的系统:

/usr/local/bin删除符号链接python

这将使python你键入python ,它应该返回执行/usr/bin/python ,这是系统的python 2.7.2的别名。

 sudo rm /usr/local/bin/python 

移动/usr/binPATH具有更高的优先级

如果你已经在/usr/local/bin中拥有优先于/usr/bin东西,那么这可能是不可取的,但为了完整性,我添加了这个东西。

在你的shellconfiguration文件(不知道Ubuntu的默认是什么,但是我使用~/.bash_profile ,你可以这样做:

 export PATH=/usr/bin:$PATH 

删除你的python安装

这是极端的,我提出的第一个select应该是你的第一个select。

你真的需要你自己的Python版本吗? 如果你想要孤立的Python环境,你可能真的想要virtualenv 。 除非有理由不要,否则你可能会删除你的。

这虽然会有些恼人,但基本上:

  • /usr/local/bin删除pythonpython2.7以及pythonwpythonw2.7命令。
  • 删除/usr/local/lib/python/2.7.2

这部分是不完整的,因为我忘记了还有什么。

我遇到同样的问题,这是我的解决scheme。

导入错误的原因是当你正在构buildpython时,系统找不到bz2头文件并跳过构buildbz2模块。

在Ubuntu / Debian上安装它们:

 sudo apt-get install libbz2-dev 

Fedora的:

 sudo yum install bzip2-devel 

然后重buildpython

来自另一个答案

@ birryree的答案有助于回到系统的原始python。

万一你必须使用python2.7,你应该运行:(Centos 6.4)

 sudo cp /usr/lib64/python2.6/lib-dynload/bz2.so /usr/local/lib/python2.7/ 

也许它会帮助某人:

 apt-get install libbz2-dev # for bz2 apt-get install libssl-dev # for _ssl apt-get install libsqlite3-dev # for sqlite apt-get install libreadline6-dev # for readline, _curses, _curses_panel 

对于Ubuntu / Debian:

 sudo apt-get install libbz2-dev 

对于Fedora:

 sudo yum install bzip2-devel 

然后重新编译python并安装它。

我在/usr/lib64/python2.6/lib-dynload/bz2.so /usr/local/lib/python2.7/lib-dynload/之间使用了一个符号链接

为我工作得很好…

matocnhoi的答案适用于我在centOS

 sudo cp /usr/lib64/python2.6/lib-dynload/bz2.so /usr/local/lib/python2.7/ 

我用了virtualenv,所以命令是

 sudo cp /usr/lib64/python2.6/lib-dynload/bz2.so ../../../env/lib/python2.7/ 

确保你安装了bz2,运行sudo yum install bzip2-devel

  • Centos 6

     sudo cp /usr/lib64/python2.6/lib-dynload/bz2.so /python_install_path/lib/python2.7 
  • Centos 7

     sudo cp /usr/lib64/python2.7/lib-dynload/bz2.so /python_install_path/lib/python2.7 

python_install_path通常是/usr/local/lib/python2.7/ ,如果你在另一个path中安装python,你需要replace它。