ImportError:Python 2.7.2找不到bz2模块

39 投票
10 回答
67331 浏览
提问于 2025-04-17 06:15

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

ImportError: No module named bz2

我以为bz2模块应该是Python 2.7自带的。那我该怎么解决这个问题呢?

补充说明:我想我之前是通过源码编译安装的Python 2.7.2。可能当时没有安装libbz2-dev,所以bz2模块没有被安装。现在,我希望通过

sudo apt-get install python2.7

来安装Python 2.7。但是它会提示说已经安装了。有没有办法卸载之前的Python 2.7安装,然后重新安装呢?

10 个回答

24

如果你必须使用python2.7的话,你应该运行以下命令:(Centos 6.4系统)

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

我也遇到了同样的问题,这里是我的解决办法。

出现导入错误的原因是,在你构建 Python 的时候,系统找不到 bz2 的头文件,所以跳过了 bz2 模块的构建。

在 Ubuntu/Debian 上安装它们:

sudo apt-get install libbz2-dev

在 Fedora 上:

sudo yum install bzip2-devel

然后重新构建 Python。

这个内容来自于 另一个回答

@birryree 的回答帮助我回到了系统原来的 Python。

28

好的,用回答的方式来讲解会更容易理解,所以我把我之前想在评论里说的内容转到这里来了。

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

你的Python程序(pythonpython2.7)位于/usr/local/bin这个文件夹里,这个文件夹通常是用来安装用户特定的东西的。这没问题,说明你的系统Python还在。

首先,试着运行系统自带的Python。在命令行里输入这个:

/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,这个PATH告诉系统在哪里找命令。/usr/local/bin的优先级高于/usr/local,所以有几种方法可以解决这个问题,按照难易程度和对系统的影响排序:

/usr/local/bin中移除符号链接python

这样当你输入python时,就会回到执行/usr/bin/python,也就是系统自带的Python 2.7.2。

sudo rm /usr/local/bin/python

/usr/bin放在PATH中更高的位置

如果你在/usr/local/bin里已经有一些东西需要优先于/usr/bin,这可能就不太合适,但我还是把这个方法列上来以便完整。

在你的shell配置文件中(不太确定Ubuntu的默认是什么,但我用的是~/.bash_profile),你可以这样做:

export PATH=/usr/bin:$PATH

删除你的Python安装

这个方法比较极端,之前提到的第一个选项应该是你的首选。

你真的需要自己安装的Python版本吗?如果你想要隔离的Python环境,可能更适合使用virtualenv。如果没有特别的理由,你可以考虑删除自己的版本。

虽然这样做会有点麻烦,但基本上:

  • /usr/local/bin中删除pythonpython2.7pythonwpythonw2.7这些命令。
  • 删除/usr/local/lib/python/2.7.2

这部分没有完全列出,因为我忘记还有什么其他的了。

撰写回答