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模块没有被安装。现在,我希望通过
sudo apt-get install python2.7
来安装Python 2.7。但是它会提示说已经安装了。有没有办法卸载之前的Python 2.7安装,然后重新安装呢?
10 个回答
如果你必须使用python2.7的话,你应该运行以下命令:(Centos 6.4系统)
sudo cp /usr/lib64/python2.6/lib-dynload/bz2.so /usr/local/lib/python2.7/
我也遇到了同样的问题,这里是我的解决办法。
出现导入错误的原因是,在你构建 Python 的时候,系统找不到 bz2 的头文件,所以跳过了 bz2 模块的构建。
在 Ubuntu/Debian 上安装它们:
sudo apt-get install libbz2-dev
在 Fedora 上:
sudo yum install bzip2-devel
然后重新构建 Python。
这个内容来自于 另一个回答
@birryree 的回答帮助我回到了系统原来的 Python。
好的,用回答的方式来讲解会更容易理解,所以我把我之前想在评论里说的内容转到这里来了。
幸运的是,你没有覆盖系统自带的Python版本,因为Ubuntu 11.10自带的是2.7.2。
你的Python程序(python
和python2.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
中删除python
、python2.7
、pythonw
和pythonw2.7
这些命令。 - 删除
/usr/local/lib/python/2.7.2
。
这部分没有完全列出,因为我忘记还有什么其他的了。