Python3 版本升级
一、前言
Linux系统中默认带的版本是Python3.8.10,升级到3.12.3。
本文档基于Ubuntu 20.04 LTS 编写
文档兼容性列表
- Ubuntu 20.04 LTS 通过
- Ubuntu 18.04 暂未验证
CentOS 7.6(1810) 暂未验证
二、升级步骤
2.1 安装常用编译工具(可选)
出于最小化安装的原则,可先执行编译安装,再根据提示安装所需依赖。
sudo apt update sudo apt install -y build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev libsqlite3-dev wget libbz2-dev gcc make2.2 下载Python源码
sudo wget https://www.python.org/ftp/python/3.12.3/Python-3.12.3.tgz2.3 解压源码
sudo tar xzf Python-3.12.3.tgz cd Python-3.12.32.4 编译安装
sudo ./configure --enable-optimizations sudo make altinstall注意,此处使用
make ltinstall命令(而非make install),防止覆盖系统默认的python命令。三、软链接
Python3.12.3安装路径是
/usr/local/bin/路径。/usr/local/bin/ ├── 2to3-3.12 ├── idle3.12 ├── pydoc3.12 ├── python3.12 └── python3.12-config系统自带的python在
/usr/bin/路径/usr/bin/ ├── pdb3.8 -> ../lib/python3.8/pdb.py ├── py3clean ├── py3compile ├── py3versions -> ../share/python3/py3versions.py ├── pydoc3 -> pydoc3.8 ├── pydoc3.8 ├── pygettext3 -> pygettext3.8 ├── pygettext3.8 ├── pyhtmlizer3 ├── pyjwt3 ├── python3 -> python3.8 ├── python3.8可以看到,在
/usr/bin/路径下,python3是指向python3.8的软链接/usr/bin中的python3.8是系统自带的python,即python3.8.10版本。
通过查看系统环境变量可知:[root@CentOS bin]# echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin在目前情况下,直接执行
python3命令,会执行/usr/bin/python3.8,即python3.8.10版本。
由于在目前的$PATH中python3.12.3版本所在的/usr/local/bin路径优先于/usr/bin路径。执行python3.12命令时,会启动新安装的python3.12.3版本。3.1 修改软链接
ln -snf /usr/local/bin/python3.12 /usr/bin/python3修改后不论是执行
python3、python3.12都将运行python3.12.3新版本3.2 恢复旧版本
ln -snf /usr/python3.8 /usr/bin/python3将软连接修改回旧版本
修改后执行python3、python3.8`将运行python2.7.5老版本
执行python3.12将运行python3.12.3新版本3.3 删除新版本安装
如不再需要新版本可删除
/usr/local/bin/中属于python3.12.3的程序文件。/usr/local/bin/ ├── 2to3-3.12 ├── idle3.12 ├── pydoc3.12 ├── python3.12 └── python3.12-config注意,如果目录内有其他文件请谨慎删除。
四、覆盖升级
4.1 覆盖安装python
上文中采用共存方式升级,以便进行退回。
若需要覆盖升级,在进行2.4 编译安装步骤时使用如下命令:
sudo ./configure --enable-optimizations
sudo make install使用make install安装后,程序会自动生产软连接。
/usr/local/bin/
├── 2to3 -> 2to3-3.12
├── 2to3-3.12
├── idle3 -> idle3.12
├── idle3.12
├── pydoc3 -> pydoc3.12
├── pydoc3.12
├── python3 -> python3.12
├── python3.12
├── python3.12-config
└── python3-config -> python3.12-config此时由于/usr/local/bin在$PATH中的优先级更快,因此执行python3、python3.12都将运行python3.12.3。
而执行python3.8将运行老版本python3.8.10
老版本python3.8文件可以酌情删除。