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

时间:2011-11-13 22:31:29

标签: python python-2.7 ubuntu

我在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安装并重新安装?

10 个答案:

答案 0 :(得分:45)

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

导入错误的原因是在构建python时,系统找不到bz2头并跳过构建bz2模块。

在Ubuntu / Debian上安装它们:

sudo apt-get install libbz2-dev

Fedora的:

sudo yum install bzip2-devel

然后重建python

来自another answer

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

答案 1 :(得分:25)

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

幸运的是,你没有覆盖系统版本的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,告诉shell在哪里找到命令。 /usr/local/bin优先于/usr/local,因此有一些方法可以解决这个问题,按照难度/烦恼/改变您的系统的顺序:

python

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

这将使得当你键入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。你可以删除你的,除非有理由不这样做。

虽然会有点烦人,但基本上是:

  • python删除python2.7pythonw以及pythonw2.7/usr/local/bin命令。
  • 删除/usr/local/lib/python/2.7.2

这部分内容不完整,因为我忘记了其他内容。

答案 2 :(得分:23)

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

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

答案 3 :(得分:6)

也许它会帮助某人:

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

答案 4 :(得分:4)

对于Ubuntu / Debian:

sudo apt-get install libbz2-dev

对于Fedora:

sudo yum install bzip2-devel

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

答案 5 :(得分:3)

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/

答案 6 :(得分:2)

我在/usr/lib64/python2.6/lib-dynload/bz2.so /usr/local/lib/python2.7/lib-dynload/

之间使用了符号链接

对我来说很好......

答案 7 :(得分:1)

确保已安装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/,如果您在另一条路径中安装python,则需要替换它。

答案 8 :(得分:1)

如果/usr/lib64/python2.7/lib-dynload/中的bz2命名为:“ bz2.x86_64-linux-gnu.so”,将其复制到路径时,请记住将其重命名为bz2.so。否则可能来源不正确:

cp /usr/lib64/python2.6/lib-dynload/bz2.x86_64-linux-gnu.so /python_install_path/lib/python2.7/bz2.so

答案 9 :(得分:0)

我在Ubuntu上使用Python 2.17.15和pyenv遇到了同样的问题。来自/ usr / bin / python的系统python工作正常。就我而言,它有助于安装libbz2-dev,然后重新安装python 2.7.15:

StructField(String name, DataType dataType, boolean nullable, Metadata metadata)