一、前言

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 make

    2.2 下载Python源码

    sudo wget https://www.python.org/ftp/python/3.12.3/Python-3.12.3.tgz

    2.3 解压源码

    sudo tar xzf Python-3.12.3.tgz
    cd Python-3.12.3

    2.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

    修改后不论是执行python3python3.12都将运行python3.12.3新版本

    3.2 恢复旧版本

    ln -snf /usr/python3.8 /usr/bin/python3

    将软连接修改回旧版本
    修改后执行python3python3.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中的优先级更快,因此执行python3python3.12都将运行python3.12.3。
而执行python3.8将运行老版本python3.8.10
老版本python3.8文件可以酌情删除。

标签: none

添加新评论