VPS主机如果选择的是Linux发行版,那么这个发行版一般会预装Python解释器。但是由于Python自身的原因,Python 2和Python 3有着一些区别,造成Python 2开发的软件在Python 3环境下可能不能正确执行。事实上Linux系统下是可以允许Python 2和Python 3共存的,Python程序根据需要使用对应的解释器即可。

Liuxr的发行版默认安装Python 2,因为它目前应用最为广泛,但是随着Python 3越来越成熟,并且Python团队也一再给出终止支持Python 2的时间表,相信Python 3会逐渐成为Pyhton开发的主流环境。

本文将以CentOS系统为例,详细讲解如何采用源代码方式安装Python 3,并介绍在安装完成后如何处理一些可能会遇到的问题。

步骤1] 下载Python 3源代码包

Python是开源免费的软件,可以在其官方网站www.python.org下载最新版Python 3的源代码包,目前最新版为3.6.5。使用如下命令下载源代码包,并解压至当前目录:

 # wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz
 # tar -zxvf Python-3.6.5.tgz
 # cd Python-3.6.5

步骤2] 编译安装Python 3

使用如下命令对Python 3源代码进行编译和安装,注意这里在配置安装时使用两个参数,–prefix用于指定安装的目标文件夹为”/usr/local/python3″,–enable-optimizations允许使用优化:

 # ./configure --prefix=/usr/local/python3 --enable-optimizations
 # make
 # make install

如果使用默认参数安装,可能会造成覆盖Python 2的情况,于是我们预先指定另外一个Python 3的目录用于存放Python 3解释器。

步骤3] 配置Python两版本共存

安装完成成后,Python 3的可执行文件(即为解释器)为”/usr/local/python3/bin/python3″,而Python 2的解释器默认位于”/usr/bin/python2.7″,配置两个版本共存的方法就是通过创建不同的链接文件至相应的解释器:

 # ln -s /usr/bin/python2.7 /usr/bin/python2
 # ln -s /usr/local/python3/bin/python3.6 /usr/bin/python3

这样,就创建了两个链接文件”python2″和”python3″用于分别指向不同的Python解释器。当然,习惯上还是需要一个默认的Python解释器,可以直接通过”python”命令来使用,CentOS将Python 2作为默认解释器。采用如下方式将默认解释器更换为Python 3:

 # cd /usr/bin
 # mv python python.bak
 # ln -s /usr/local/python3/bin/python3.6 /usr/bin/python

这样,就可以将Python的默认解释器修改为Python 3了,当然,为了保险起见,还是将原来的链接文件作了备份。全部操作过程如下图所示:

图.1 Python通过链接文件切换版本

如图所示,通过修改链接文件,就方便的在Python的不同版本间切换,并且将默认的Python解释器设置为Python 3。

步骤4] CentOS更换Python 3后的问题处理

CentOS如果将默认的Python解释器设置为Python 3,那么最直接的影响就是”yum”工具不可用。事实上”yum”是一个Python脚本,只可以在Python 2环境下运行,如果我们修改了默认解释器,当然yum工具就不能使用了。不单是yum工具,我使用的证书工具”certbotauto”也一样,还有很多工具都是基于Python 2环境的,在Python 3环境下当然会出问题。解决办法也很简单,这些工具其实都是Python脚本,在脚本的开头重新指定一下默认的解释器就可以了。以yum工具为例,修改”/usr/bin/yum”文件,对其做如下修改:

 #!/usr/bin/python  ==> #!/usr/bin/python2.7

如上所示,在文件的开头重新指定Python解释器为python2.7,就可以再次运行”yum”工具了,如果系统报如下错误:

  File "/usr/bin/yum", line 30
    except KeyboardInterrupt, e:
                            ^
  SyntaxError: invalid syntax

多半是因为Python环境有问题,都可以通过以上办法加以解决。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注