su - root
# 检查依赖与配置编译
./configure --enable-optimizations --with-lto --enable-shared
#--enable-optimizations:用 PROFILE_TASK 启用以配置文件主导的优化(PGO)
#--with-lto:在编译过程中启用链接时间优化(LTO)
#--enable-shared:启用共享 Python 库 libpython 的编译
# 编译,-j 后面的数字为参与编译的CPU核心数,根据个人机器配置调整
# 安装二进制文件
make -j 4 && make altinstall
故应使用 altinstall 而不是 install 。二者的一个重要区别在于,后者会创建符号链接,将 python3 等命令链接到正在安装的新版本 Python 3 上,这可能会破坏系统。更多信息请参阅当前目录下的 README.rst 文件。
root:/usr/local/lib/python3.9# python3.11
python3.11: error while loading shared libraries: libpython3.9.so.1.0: cannot open shared object file: No such file or directory
链接动态库
由于编译配置中有 --enable-shared 的选项,故此时直接使用命令 python3.9 会提示无法找到 libpython3.9.so.1.0 的错误。只需找到该 so 文件,复制(或创建符号链接)到 /usr/lib/ 目录下即可:
# 找到 libpython 的位置
$ whereis libpython3.9.so.1.0
libpython3.9.so.1: /usr/local/lib/libpython3.9.so.1.0
# 在 /usr/lib/ 下创建 libpython 的符号链接
ln -s /usr/local/lib/libpython3.9.so.1.0 /usr/bin/python3.9
使用 Python 3.9
完成安装后,Python 3.9 会与系统原有的 Python 3.10 共存。由于 Ubuntu 系统、安装的其他软件等很可能会依赖于系统原有的 3.10,所以不要移除原有 Python 环境,也不要对 python3 等命令进行修改。
# 在命令行使用 Python 交互式解释器
$ python3.9
Python 3.9.12 (main, Apr 22 2022, 18:58:57)
[GCC 11.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
# 查看该命令所在位置
$ which python3.9
/usr/local/bin/python3.9
类似的,使用 Python 3.9 的 pip 的命令为 pip3.9
# 查看 pip3.9 版本
$ pip3.9 -V
pip 22.0.4 from /usr/local/lib/python3.9/site-packages/pip (python 3.9)