CentOS的设计理念中有一点是:持久可用。要达到这个目的,CentOS的ABI、API必须是稳定且兼容的。这就造成了某些软件不可能随意地升级到最新版本。以Python为例,CentOS6.x中的Python版本一直就是2.6,无论现在的Python做了多少升级,引入了多少新包,加入了多少新功能,解决了多少Bug。 这样做当然有它的好处。例如企业可以一次投入,在整个系统的维护期内(10年)可以不需要因为兼容性问题而被动进行软件的升级。但是这样的策略也有它的弊端。例如无法使用更新的功能,更好的解决方案。 以Python来说,Python2.7引入了argprase这个命令行解析模块,在Python2.6中就只能用optprase这个模块。optpraser这个模块有一个问题,在使用PyInstaller制作可执行文件后,执行时显示不出中文字符。这或许也有PyInstaller的原因,但是往往第三方软件包的维护者只关心主流的版本,对于其它认为“非主流”的版本就没有投入太多的精力。要解决PyInstaller中文乱码的问题,最直接是还是安装Python2.7,使用argprase模块,然后使用相应版本的PyInstaller生成可执行文件。 那么,怎样在CentOS6.x上安装Python2.7呢?因为要保证“持久可用”,也就是说用Python2.6写的代码要一直能够正常地运行在系统中。CentOS并不提供(或者至少没有简单的,安全的方法)Python的直接升级。CentOS 的维护者当然也想到了需要对“特定情况”作出处理。所以给出“软件选集(SCL)”。 CentOS6.x提供了如下的软件选集: * Ruby 1.9.3 (ruby193) * Python 2.7 (python27) * Python 3.3 (python33) * PHP 5.4 (php54) * Perl 5.16.3 (perl516) * Node.js 0.10 (nodejs010) * MariaDB 5.5 (mariadb55) * MySQL 5.5 (mysql55) * PostgreSQL 9.2 (postgresql92) 要安装这些高版本的软件,首先需要安装centos-release-SCL yum install centos-release-SCL 然后安装所需的软件,以Python为例: yum install python27 安装完成后,并不意味着系统中自带的Python2.6被升级到2.7版本,事实上,安装python27后对原有系统中的python2.6没有任何影响。因为python2.7是被安装到 /opt/rh/python27 中。要使用python2.7,需要执行: scl enable python27 bash 它将使python2.7在当前的bash下可以使用。 接下来介绍如何使用pip安装Python的第三方软件包。 首先下载ez_setup.py: wget http://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py 在执行了”scl enable python27 bash“的终端中执行如下命令: python ez_setup.py easy_install-2.7 pip 然后就可以使用pip安装软件了。 这里要注意,每次关闭终端后,python都将变成系统自带的2.6版本。要使用2.7版本,需要重新执行: scl enable python27 bash (责任编辑:IT) |