我已安装在我的主目录中。
[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
答案 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
:
yum install bzip2-devel
wget http://www.bzip.org/1.0.6/bzip2-1.0.6.tar.gz
tar -zxvf bzip2-1.0.6.tar.gz
cd bzip2-1.0.6
make && make install
配置并重新编译python
这些步骤有时会起作用。
最后,我已经找到了问题,它需要/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,但你应该在你自己的环境中构建它。
这是我的解决方案:
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
)。
以下是我可以使其正常运行的步骤:
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"
yum install -y bzip2-devel
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可能会跳过:
sudo yum install bzip2-devel
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.7
和 3.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
>>>