CentOS服务器上安装Python3.7并设置为默认Python
最近由于课程设计要求要在服务器上配置Flask
框架,但是我在配置的时候各种报错搞不来,搜了一番之后发现是默认Python版本是2.7导致的。然后我尝试去运行Python3,发现服务器上压根没有…于是…就有了这篇文章
注:本文转载自https://blog.csdn.net/weixin_41216356/article/details/99819899
0x00 引言
Linux操作系统自带一个Python2.7,没有Python3,在开发的时候非常不便,因此需要安装一个Python3,并且将Python3设置系统默认Python,同时还不能影响那些Linux系统中需要用Python2的底层文件。
0x01 安装Python3
查看操作系统及Python基本信息
首先查看一下系统的版本以及Python信息,各系统查看信息的方法参考:https://www.cnblogs.com/wzk-0000/p/7483262.html
1 | cat /etc/redhat-release # 查看内核版本 |
我这边的系统的内核为CentOS 7,默认Python的版本为2.7.5,路径为/usr/bin/python
。
然后我们导航到该目录,查看Python相关文件的信息,可以看到Python和Python2指向的都是Python2.7。
1 | [root@libra-server ~]# cd /usr/bin |
安装依赖包(编译,安装程序等所需)
1 | yum -y groupinstall "Development tools" |
如果是RedHat/CentOS平台,用yum install
;如果是Ubuntu/Debian平台,用apt-get install
。
下载Python
到Python官方页面选择一个版本的Python:Python Source Releases,选择XZ compressed source tarball
,复制下载链接:
然后用wget
命令下载到用户目录,(如果下载速度太慢可以用sohu的镜像源:http://mirrors.sohu.com/),也可以用本地主机下好后scp
传到服务器上去。
1 | [root@libra-server bin]# cd ~ |
编译并安装Python
首先对刚刚下载的压缩包进行解压。
1 | [root@libra-server ~]# tar -xvJf Python-3.7.4.tar.xz |
进入解压后的目录,可以看到Python的源码文件,其中configure
用来配置,配置完成后会生成用来安装的Makefile
。
1 | [root@libra-server ~]# cd Python-3.7.4 |
配置安装目录:
1 | [root@libra-server Python-3.7.4]# ./configure prefix=/usr/local/python3 --enable-optimizations |
注:有时候如果加上开启优化选项
--enable-optimizations
,下面编译make
时会报错Fatal Python error: _PySys_BeginInit: can't initialize sys module
,可能和内核版本有关系,如果报错可以去掉该选项然后重新配置并编译。
编译并安装Python:
1 | [root@libra-server Python-3.7.4]# make |
然后cd
到/usr/local
,可以看到Python3已经安装好了:
1 | [root@libra-server bin]# cd /usr/local/ |
将Python3添加到系统命令
将/python3/bin
中的Python3 软链到/usr/bin/python
,使以后执行python
命令时都会指向Python3。
如果在这一步报错,则需要把之前的Python重命名做一个备份:
1 | [root@libra-server ~]# ln -s /usr/local/python3/bin/python3 /usr/bin/python |
然后执行python
,可以发现已经是3.7.4版本的了。
1 | [root@libra-server ~]# python |
将需要Python2的程序重定向到Python2
由于yum
需要Python2,所以需要把yum
文件重新指向Python2。
1 | [root@libra-server ~]# vi /usr/bin/yum |
然后将第一行的 #!/usr/bin/python
更改为 #!/usr/bin/python2
,yum
就可以执行了。
同理,/usr/libexec/urlgrabber-ext-down 这个文件也做一下相同的操作。
配置pip3
如下所示可以看到,pip3还没有添加进系统目录里,因此同样需要做一下软链。
1 | [root@libra-server ~]# pip2 -V |
将原来的pip备份,然后把pip3软链到pip,这样以后执行pip就是pip3,pip2就是pip2了:
1 | [root@libra-server ~]# mv /usr/bin/pip /usr/bin/pip.bak |
0x02 总结
基本上就是这样了,步骤基本上可以分为:
- 安装依赖库并备份原
/usr/bin
目录下的Python - 下载并编译安装Python3
- 建立Python3和pip3的软链
- 把需要Python2的系统文件改写,重新指向Python2