话说上次给那台装CentOS 5的免费VPS升级了Python,这次我们继续来安装IPython。
一.IPython是什么
IPython是Python的交互式Shell,提供了代码自动补完,自动缩进,高亮显示,执行Shell命令等非常有用的特性。特别是它的代码补完功能,例如:在输入zlib.之后按下Tab键,IPython会列出zlib模块下所有的属性、方法和类,如图一所示,绝对是居家旅行,杀人放火之必备神器啊。
图一:IPython代码自动补完
二.安装IPython
IPython的安装很简单,按照《升级CentOS的Python》 http://www.linuxidc.com/Linux/2014-04/100039.htm 安装好Python和setuptools之后,我们直接用setuptools提供的easy_install命令就能自动安装好所需要的模块。在远程终端中执行下列命令:
easy_install install ipython
虽然现在IPython能用了,但由于缺少Python readline模块,它的代码自动补完,自动缩进,高亮显示这三个最有用的特性都不可用,如图二所示。
图二:缺少readline支持的IPython
看到它最上面的提示了吧:
WARNING: IPython History requires SQLite, your history will not be saved
WARNING: Readline services not available or not loaded.WARNING: The auto-indent feature requires the readline
换句话说,IPython这丫的现在就等于是个废物。好吧,我们来解决readline的问题。至于它提示缺少的SQLite模块,本来是Python的内置模块,但是由于我们当初编译Python时没有安装sqlite-devel,所以Python现在不支持这个库,不过这这几乎不影响我们的使用。
三.安装readline
先来安装编译Python readline所需要的readline-devel,执行:
yum install -y readline-devel
Tips:devel是Development的缩写。readline-devel包,包含了readline模块的申明和头文件等,给使用了readline模块的程序提供编译支持。前面提到的sqlite-devel、zlib-devel等,功能于此类同。
接着用easy_install安装Python的readline模块,执行:
easy_install readline
结果报错,如图三所示。
图三:安装readline报错
可以看到,最后三行提示:
gcc: readline/libreadline.a: No such file or directory
gcc: readline/libhistory.a: No such file or directory
error: Setup script exited with error: command ‘gcc’ failed with exit status 1
我们已经安装了readline-devel,却提示找不到libreadline.a和libhistory.a,应该是路径有问题。执行下面的命令查看系统把readline-devel安装到了那儿,结果如图四所示:
图四:readline-devel安装路径
可以看到,libreadline.a和libhistory.a被安装到了/usr/lib/路径下,难怪找不到了。
下面我们来手动安装Python readline模块,依次执行下面的命令:
wget http://pypi.python.org/packages/source/r/readline/readline-6.2.4.1.tar.gz
tar zxvf readline-6.2.4.1.tar.gz
cd readline-6.2.4.1
然后找到setup.py文件中的这一段:
ext_modules=[
Extension(name=”readline”,
sources=[“Modules/%s.x/readline.c” % (sys.version_info[0],)],
include_dirs=[‘.’],
define_macros=DEFINE_MACROS,
extra_compile_args=[‘-Wno-strict-prototypes’] + UNIVERSAL.split(),
extra_link_args=UNIVERSAL.split(),
extra_objects=[‘readline/libreadline.a’, ‘readline/libhistory.a’],
libraries=[‘ncurses’]
),
],
将其中的:
extra_objects=[‘readline/libreadline.a’, ‘readline/libhistory.a’],
修改为:
extra_objects=[‘/usr/lib/libreadline.a’, ‘/usr/lib/libhistory.a’],
接着执行:
python setup.py install
结果继续报错,如图五所示。
图五:安装readline继续报错
这次提示的是:
/usr/bin/ld: cannot find -lncurses
collect2: ld returned 1 exit status
error: command ‘gcc’ failed with exit status 1
汗,看样子今天还真是一波三折啊。百度了一下发现,原来是没有安装ncurses-devel。执行:
yum install -y ncurses-devel
接下来再次执行
python setup.py install
结果如图六所示,谢天谢地,终于安装成功了。
图六:Python readline安装成功
现在再来执行IPython,代码自动完成,自动缩进和高亮显示功能就全有了,如图七所示。和图二对比一下,是不是有了一种鸟枪换大炮的感觉啊。
图七:有readline支持的IPython
更多CentOS相关信息见CentOS 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=14