我在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二进制文件(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
,告诉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环境,你可能真的想要virtualenv
。你可以删除你的,除非有理由不这样做。
虽然这会有点烦人,但基本上:
python
删除python2.7
和pythonw
以及pythonw2.7
和/usr/local/bin
命令。/usr/local/lib/python/2.7.2
这部分不完整,因为我忘了还有什么。
我在Ubuntu上遇到了与Python 2.17.15和pyenv相同的问题。来自/ usr / bin / python的系统python运行正常。在我的例子中,它帮助安装libbz2-dev然后重新安装python 2.7.15:
sudo apt-get install libbz2-dev
pyenv uninstall 2.7.15
pyenv install 2.7.15
我遇到了同样的问题,这是我的解决方案。
导入错误的原因是在构建python时,系统找不到bz2头并跳过构建bz2模块。
在Ubuntu / Debian上安装它们:
sudo apt-get install libbz2-dev
Fedora的:
sudo yum install bzip2-devel
然后重建python
@ 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并安装它。
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/
我在/usr/lib64/python2.6/lib-dynload/bz2.so /usr/local/lib/python2.7/lib-dynload/
之间使用了一个符号链接
工作得很好......
确保你安装了bz2,运行sudo yum install bzip2-devel
。
sudo cp /usr/lib64/python2.6/lib-dynload/bz2.so /python_install_path/lib/python2.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,你需要替换它。
如果/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