缺少python bz2模块

问题描述 投票:26回答:7

我已经安装在我的主目录中。

[spatel@~ dev1]$ /home/spatel/python-2.7.3/bin/python -V
Python 2.7.3

我试图运行一个需要python 2.7.x版本的脚本,我错过了bz2错误

[spatel@~ dev1]$ ./import_logs.py
Traceback (most recent call last):
  File "./import_logs.py", line 13, in <module>
    import bz2
ImportError: No module named bz2

我试图安装bz2模块,但我有很多错误

 [spatel@dev1 python-bz2-1.1]$ /home/spatel/python-2.7.3/bin/python setup.py install
    ...
    ...
    ...
    bz2.c:1765: error: âBZ_FINISH_OKâ undeclared (first use in this function)
    bz2.c:1765: warning: comparison between pointer and integer
    bz2.c:1771: error: âPyMemberDefâ has no member named âavail_outâ
    bz2.c:1778: error: âPyMemberDefâ has no member named ânext_outâ
    bz2.c:1778: error: âPyMemberDefâ has no member named âtotal_out_hi32â
    bz2.c:1778: error: âPyMemberDefâ has no member named âtotal_out_lo32â
    bz2.c:1778: error: invalid operands to binary +
    bz2.c:1778: warning: statement with no effect
    bz2.c:1779: error: âPyMemberDefâ has no member named âavail_outâ
    bz2.c:1779: error: âPyMemberDefâ has no member named ânext_outâ
    bz2.c:1779: error: invalid operands to binary -
    bz2.c:1779: error: invalid operands to binary -
    bz2.c:1779: warning: statement with no effect
    bz2.c:1783: error: âPyMemberDefâ has no member named âavail_outâ
    bz2.c:1784: error: âPyMemberDefâ has no member named âtotal_out_hi32â
    bz2.c:1784: error: âPyMemberDefâ has no member named âtotal_out_lo32â
    bz2.c:1784: warning: passing argument 2 of â_PyString_Resizeâ makes integer from pointer without a cast
    error: command 'gcc' failed with exit status 1
python linux bzip2
7个回答
58
投票

可能当你从源代码构建python时,你没有bz2头文件。

在Ubuntu / Debian上安装它们:

sudo apt-get install libbz2-dev

Fedora的:

sudo yum install bzip2-devel 

并再次构建python。你可能会注意到python在配置/构建时检查了很多库,如果你错过了其中一些库,你可能不会支持像你这样的bz2这样的库。

你应该得到预建的二进制文件来避免这种东西。 Ubuntu 12.04包含qazxsw poi,你的脚本需要的版本。


8
投票

如果您在特定位置安装python,只需安装python 2.7.3就行不通。

centos有一个解决方法:

  • 数百6 libbz2-dev
  • 数百7 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,如果你有自定义的python路径,你需要替换它。


5
投票

在CentOS 7上,安装bzip2-devel:

/usr/local/lib/python2.7/

然后重新编译python。


3
投票

您需要安装bz2 c库的开发版本。您可能没有,这就是为什么在构建python的用户副本时没有安装它的原因。在Ubuntu上它是libbz2-dev包。它可能在Fedora上被命名为相同或相似。或者您可以从www.bzip.org下载。


2
投票

您必须通过源代码重新安装sudo yum install bzip2-devel

  1. bzip2
  2. yum install bzip2-devel
  3. wget http://www.bzip.org/1.0.6/bzip2-1.0.6.tar.gz
  4. tar -zxvf bzip2-1.0.6.tar.gz
  5. cd bzip2-1.0.6
  6. 配置并重新编译python

那些步骤有时候工作。

最后,我已经找到了问题,它需要/usr/local/Python-3.5.2/lib/python3.5/lib-dynload/_bz2.cpython-35m-x86_64-linux-gnu.so,它必须有当我通过源代码编译bzip2时出现问题。我从另一个VM复制此文件以解决问题。


2
投票

我还应该在CentOS 6上添加它,确保你安装了make && make install,而不是bzip2-devel


1
投票

上面的解决方案可以解决python2.7的bz2问题。但不是python 3.x是的,你需要_bz2.cpython-3xm-x86_64-linux-gnu.so,但是你应该在你自己的环境中构建它。

这是我的解决方案:

  1. yum install bzip2-devel。 (或apt-get)
  2. 下载bzip2-1.0.6。 make && make install()
  3. 像这样构建Python3的_bz2.cpython:

在python3的源代码文件夹下的vim run.sh:Python-3.x.x.

bzip2-libs

您可以设置与您的预版本相同的前缀,这不会卸载您安装的任何软件包。在此之前,制作一个备份文件夹。

© www.soinside.com 2019 - 2024. All rights reserved.