前言
CentOS 中升级 Python 版本到Python 3.11,需要使用一些额外的步骤,因为 CentOS 的标准仓库通常不会包括最新的 Python 版本。以下是一个一般过程,但请注意,直接升级系统 Python 可能会对系统工具产生不良影响,因为它们可能依赖于特定版本的 Python。
在 Linux 系统上升级 Python 到特定版本,通常有多种方式。以下是常见的方法之一,使用源代码编译安装:
一、安装编译依赖
在编译 Python 之前,需要确保你的系统有编译所需的包。尝试安装所有常见的开发库,以确保不缺少任何编译 Python 所需的依赖:
sudo yum install -y zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel
sudo yum groupinstall "Development Tools"
构建 Python 3.11 需要openssl 1.1.1或更新版本。
如系统中使用的openssl是旧版本建议升级版本openssl版本。下述是根据源码操作步骤:
wget https://www.openssl.org/source/openssl-1.1.1w.tar.gz #下载
tar -zxvf openssl-1.1.1w.tar.gz #解压
cd openssl-1.1.1w
#编译和安装
./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl shared
make
sudo make install
# 备份一下旧版
mv /usr/bin/openssl /usr/bin/openssl.bak
# 建立新的软链接
ln -s /usr/local/openssl /usr/bin/openssl
# 编辑ld.so.conf,如没有/usr/local/lib 则新增
vi /etc/ld.so.conf
# 加载新配置
ldconfig
openssl version #查看版本
如出现下述问题 :
error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory
ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1
error while loading shared libraries: libcrypto.so.1.1: cannot open shared object file: No such file or directory
ln -s /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
二、下载 Python 源代码
访问 Python 官方网站或使用 wget 下载 Python 3.11.7 的源代码:
wget https://www.python.org/ftp/python/3.11.7/Python-3.11.7.tgz
三、解压源代码
解压下载的文件:
tar -xf Python-3.11.7.tgz
四、准备编译环境
配置 Python 源码用于编译:
cd Python-3.11.7
LDFLAGS="${LDFLAGS} -Wl,-rpath=/usr/local/openssl/lib" ./configure --with-openssl=/usr/local/openssl
五、编译和安装 Python
编译并安装 Python:
lscpu #查看linux服务器cpu
make -j 8 # 使用8个核心来编译,根据你的CPU调整这个值
六、验证安装
安装完成后,可以检查新安装的 Python 版本:
python3.11 --version
python3.11
总结
请注意,如果在一个生产环境或者对稳定性要求很高的环境中操作,建议使用系统的包管理器或者虚拟环境,以免影响系统中其他的 Python 应用程序。此外,根据你的 Linux 发行版,可能有更简单的方法来安装最新版本的 Python,例如使用conda, pyenv, 或者某些发行版特定的第三方库。CentOS 7 及以前版本可能不会支持 Python 3.11 的一些特性。如果你遇到任何问题,检查 CentOS 和 Python 的兼容性问题。