CentOS(Community Enterprise Operating System,中文意思是社区企业操作系统)是Linux发行版之一,它是来自于Red Hat Enterprise Linux依照开放源代码规定释出的源代码所编译而成。
CentOS 7 中默认安装了 Python,但是版本是2.x的,由于2020年python2.x将停止更新,因此需要将版本升级至3.x。但由于python2.x是系统集成的,很多命令都是要基于python2.x,比如:yum。因此在更新 Python 时,建议新旧版本共存。
查看当前python版本
[root@centos home]# python -V Python 2.7.5
下载
- 打开Python3官网:https://www.python.org/
- 下拉找到,下图下载位置,点击版本下载:
- 复制要安装的Python3下载地址,如:https://www.python.org/ftp/python/3.8.2/Python-3.8.2.tgz
- 命令行执行(在你需要下载的目录)
wget https://www.python.org/ftp/python/3.8.2/Python-3.8.2.tgz
编译
- 解压
tar xzvf Python-3.8.2.tgz
cd Python-3.8.2
mkdir /usr/local/python3
#按个人喜好选择目录- python3 这里是一个坑,需要安装ssl的支持
./configure --prefix=/usr/local/python3 --with-ssl
这一步可能遇到的问题:zipimport.ZipImportError: can't decompress data; zlib not available
解决方法:
yum -y install zlib*
vi Modules/Setup
#zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz
去掉这个注释make install
过程中会进行zlib相关的编译这一步还可能遇到的问题:
ModuleNotFoundError: No module named '_ctypes'
解决方案:
yum install libffi-devel -y
make install
过程中会进行ctypes
的相关编译 - 检查一下:
ls /usr/local/python3/bin
2to3 2to3-3.8 easy_install-3.8 idle3 idle3.8 pip3 pip3.8 pydoc3 pydoc3.8 python3 python3.8 python3.8-config python3-config
要注意的是产生了:python3
和 pip3.8
- 查看版本:
/usr/local/python3/bin/python3 -V
,应该显示Python 3.8.2
; - 运行:
/usr/local/src/python3/bin/pip3 -V
,应显示:pip 10.0.1 from /usr/local/src/python3/lib/python3.7/site-packages/pip (python 3.7)
进行链接替换,生效python3.7
- 执行
python -V
输出Python 2.7.5
- 查找文件并显示命令路径(which是查找PATH路径下配置的文件)
which python
,显示/usr/bin/python
- 执行
pip -V
输出pip 20.1 from /usr/lib/python2.7/site-packages/pip-20.1-py2.7.egg/pip (python 2.7)
如显示-bash: pip: command not found
运行easy_install pip
- 执行
which pip
输出/usr/bin/pip
- 链接替换:
ln -s /usr/local/python3/bin/python3 /usr/bin/python -f ln -s /usr/local/python3/bin/pip3 /usr/bin/pip -f
- 检查执行:
python -V
应显示Python 3.8.2
- 执行:
pip -V
显示pip 19.2.3 from /usr/local/python3/lib/python3.8/site-packages/pip (python 3.8)
- 还需要补充一个
easy_install
的指向,要知道这个也是有版本区别的,在后续我们使用python3的时候,可能还需要用到,因此就需要进行链接切换:ln -s /usr/local/python3/bin/easy_install /usr/bin/easy_install -f
实际上熟悉linux的同学知道这仅仅就是环境变量的切换,
只是上面采用了覆盖
python2
的默认文件来实现这个python/pip/easy_install
指向python3
方法很多,例如将/usr/local/src/python3/bin的路径放在PATH的最前面,等等。
结果一样,就看自己要怎么使用了。
yum 的影响
yum的脚本是基于python2.x
的,因此,这里将系统变量进行了python3
的修改,那么就应该对yum
的脚本做python2.x
的指定
vm /usr/bin/yum
#!/usr/bin/python2.7
除了yum脚本以外,还有:
vi /usr/libexec/urlgrabber-ext-down
同样是进行指定`python2.7