说来话长,解决这个问题起源于python的一个错误,ImportError: No module named bz2
一开始是在跑esrally的时候,遇到的。
[root@soc bin]# ./esrally
Traceback (most recent call last):
File "./esrally", line 7, in <module>
from esrally.rally import main
File "/usr/local/python/lib/python3.4/site-packages/esrally/rally.py", line 11, in <module>
from esrally import config, paths, racecontrol, reporter, metrics, track, exceptions, PROGRAM_NAME, DOC_LINK
File "/usr/local/python/lib/python3.4/site-packages/esrally/config.py", line 10, in <module>
from esrally.utils import io, git, console, convert
File "/usr/local/python/lib/python3.4/site-packages/esrally/utils/io.py", line 5, in <module>
import bz2
File "/usr/local/python/lib/python3.4/bz2.py", line 21, in <module>
from _bz2 import BZ2Compressor, BZ2Decompressor
ImportError: No module named '_bz2'
最后一句:
ImportError: No module named '_bz2'
实际说明python运行的时候少了一个bz2的包。
先后尝试了pip3安装,都失败了:
pip3 install _bz2
pip3 install bz2
但实际系统当中是有这个包的:
[root@CentOS-7 bzip2-1.0.6]# yum install bzip2
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
软件包 bzip2-1.0.6-13.el7.x86_64 已安装并且是最新版本
无须任何处理
之后参考一些文章了解到,原来bz2本身编译的过程如果不完善会导致python安装的时候,无法正确安装bz2模块。看来只能重装了。
1、重装bzip2
wget http://www.bzip.org/1.0.6/bzip2-1.0.6.tar.gz
tar -zxf bzip2-1.0.6.tar.gz
cd bzip2-1.0.6
make -f Makefile-libbz2_so
make && make install
注:make-f //-f 标志是使bzip2 根据另一个Makefile来编译,就是Makefile-libbz2_so文件,创建一个动态的libbz.so库文件,然后把bzip2工具连接到这个库上
装python的时候如果没有这一步,python安装不上bz2模块
2、重新编译python
具体步骤和安装Python[附]的步骤其实一样,最主要就是从./configure --prefix=/usr/local/python开始向下重新做一遍就是了。
3、验证bz2包是否正确安装。
Python安装完成后,进入测试一下:
[root@CentOS-7 bin]# python
Python 3.4.6 (default, Feb 15 2017, 17:57:43)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-4)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import bz2
>>>
否则bz2会提示如下错误:
>>> import bz2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/python/Python-3.4.6/Lib/bz2.py", line 21, in <module>
from _bz2 import BZ2Compressor, BZ2Decompressor
ImportError: No module named '_bz2'
>>>
至此,OK完整解决。运行esrally也出效果了。
附:手工安装Python3.4.6