缺少python bz2模块

时间:2012-10-09 18:26:08

标签: python linux bzip2

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

[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

15 个答案:

答案 0 :(得分:59)

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

在Ubuntu / Debian上安装它们:

sudo apt-get install libbz2-dev

Fedora的:

sudo yum install bzip2-devel 

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

你应该得到prebuild二进制文件以避免这种东西。 Ubuntu 12.04打包python 2.7.3,这是您的脚本需要的版本。

答案 1 :(得分:12)

在导入熊猫时,我在python 3.8.2中发生了这种情况:import pandas as pd

导致一长串错误消息,结尾为:“错误:ModuleNotFoundError:没有名为'_bz2'的模块”

通过执行以下两个bash命令可以解决此问题:

sudo apt-get install libbz2-dev
sudo cp /usr/lib/python3.8/lib-dynload/_bz2.cpython-38-x86_64-linux-gnu.so  /usr/local/lib/python3.8/

然后工作正常。

答案 2 :(得分:8)

如果您在特定位置安装python,则只需安装libbz2-dev即可。

centos有一个解决方法:

  • 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路径,则需要替换它。

答案 3 :(得分:5)

在CentOS 7上,安装bzip2-devel:

sudo yum install  bzip2-devel

然后重新编译python。

答案 4 :(得分:3)

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

答案 5 :(得分:2)

您必须按源代码重新安装bzip2

  1. yum install bzip2-devel

  2. wget http://www.bzip.org/1.0.6/bzip2-1.0.6.tar.gz

  3. tar -zxvf bzip2-1.0.6.tar.gz

  4. cd bzip2-1.0.6

  5. make && make install

  6. 配置并重新编译python

  7. 这些步骤有时会起作用。

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

答案 6 :(得分:2)

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

答案 7 :(得分: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。制造&amp;&amp; make install()
  3. 像这样构建Python3&#39z_.cpython:
  4. vthon run.sh在python3的源代码文件夹下:Python-3.x.x

    export CFLAGS="-I/usr/include"
    export LDFLAGS="-L/usr/lib64"
    export LD_LIBRARY_PATH=/usr/lib64
    make distclean
    ./configure --prefix=/home/xxx/Python3 && make && make install
    

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

答案 8 :(得分:1)

从其他位置安装Python时,我也遇到这个问题(我在Python 3.7.5上使用Centos 7)。

以下是我可以使其正常运行的步骤:

  1. 导出环境变量
export PATH=<YOUR_PYTHON_PATH>/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
export PYTHONPATH=<YOUR_PYTHON_PATH>/lib/python3.7/site-packages
export LD_RUN_PATH=/usr/local/lib:/usr/lib64
export LD_LIBRARY_PATH=/usr/local/lib:/usr/lib64
export CFLAGS="-I/usr/include"
export LDFLAGS="-L/usr/lib64"
  1. 安装bzip2-devel
yum install -y bzip2-devel
  1. 下载并编译bzip2
wget/curl <bzip2_url>
make
make install

这样做,您无需下载_bz2.cpython-35m-x86_64-linux-gnu.so文件。

答案 9 :(得分:1)

发生这种情况是因为缺少.so文件。

python3.7,请从以下位置下载文件: _bz2.cpython-37m-x86_64-linux-gnu.so

对于python的不同版本,请尝试为您的版本查找此文件。说python3.8,将37更改为38等,然后找到并下载文件。

现在Ubuntu:使用/usr/local/lib/python3.7特权将文件复制到sudo文件夹中。

为此,请转到下载文件的文件夹并执行命令(根据python版本相应地更改文件名和目标文件夹):

sudo cp _bz2.cpython-37m-x86_64-linux-gnu.so /usr/local/lib/python3.7

最后下载python,解压缩zip文件,解压缩后进行配置和编译:

./configure --enable-optimizations
sudo make altinstall

答案 10 :(得分:0)

这是我的解决方案,步骤2-6可能会跳过:

  1. sudo yum install bzip2-devel

  2. https://github.com/nemequ/bzip2/releases

  3. 下载bzip2-1.0.6.tar.gz
  4. tar -zxvf bzip2-1.0.6.tar.gz
  5. cd bzip2-1.0.6
  6. 进行&&进行安装
  7. https://github.com/Imaginashion/ccdev-vision/blob/master/.fr-d0BNfn/django-jquery-file-upload/venv/lib/python3.5/lib-dynload/_bz2.cpython-35m-x86_64-linux-gnu.so下载文件并将其移至/ [您的python路径] /lib-dynload/_bz2.cpython-35m-x86_64-linux-gnu.so
  8. sudo ln -s find /usr/lib64/ -type f -name "libbz2.so.1*" /usr/lib64/libbz2.so.1.0 归功于https://michaelheap.com/error-while-loading-shared-libraries-libbz2-so-1-0-cannot-open-shared-object-file-on-centos-7

答案 11 :(得分:0)

只有在为我导入大熊猫时,这才在Jupyter中发生。

我的解决方法是将/usr/lib/python3.8/lib-dynload(包括_bz2.cpython-38-x86_64-linux-gnu.so)的内容复制到~/.local/lib/python3.8/site-packages/

答案 12 :(得分:0)

我在使用本地编译的python 3.6.9的debian Stretch上遇到了相同的问题 在/usr/local/lib/python3.6/lib-dynload/中,有一个_bz2.cpython-365m-x86_64-linux-gnu.so文件(请注意“ 365m ”部分。 ) 我创建了指向该库的符号链接,它解决了问题:

sudo ln -s _bz2.cpython-365m-x86_64-linux-gnu.so _bz2.cpython-369m-x86_64-linux-gnu.so
sudo ln -s _bz2.cpython-365m-x86_64-linux-gnu.so _bz2.cpython-36m-x86_64-linux-gnu.so

答案 13 :(得分:0)

我也得到了这个烦人的输出并修复了那个错误。我实际上在 Python 3.73.8 中遇到了那个错误。我什至在远程服务器上没有 sudo 权限,但我设法通过降级 Python 修复了该错误。安装 Python 3.6 而不是 3.7 或 3.8 可以解决问题。

答案 14 :(得分:0)

就我而言,我在导入熊猫 import pandas 时遇到了这个错误。安装 python 3.9.1 解决了这个问题。

我的 python 版本是 3.8.6,我使用的是 Pyenv 并运行 MacOS Big Sur。

错误

$ python
Python 3.8.6 (default, Nov 21 2020, 02:39:42)
[Clang 12.0.0 (clang-1200.0.32.27)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import pandas as pd
Traceback (most recent call last):
...
    from _bz2 import BZ2Compressor, BZ2Decompressor
ModuleNotFoundError: No module named '_bz2'

已安装 3.9.1

$ pyenv install --list
$ pyenv install 3.9.1
$ pyenv local 3.9.1
$ pyenv global 3.9.1
$ pip install pandas

再来

$  python
Python 3.9.1 (default, Jul  5 2021, 22:26:09)
[Clang 12.0.5 (clang-1205.0.22.11)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import pandas as pd
>>>