前言
- 问题来源于业务需求,需要在CentOS7.9系统上验证功能性问题。安装CentOS的虚拟机后发现CentOS自带的Python3版本是Python3.6.8,与业务需要的Python版本(>=3.7)不符,本文以3.8.6为例,安装该Python版本。
- 确定了问题,接着确定问题的解决思路。想过三种解决思路:①从已有的Python3.6.8升级版本;②单独新增Python3.8.6版本;③通过Anaconda安装Python3.8.6;本问题以第二种方法为切入点详细记录相关过程
1. 操作步骤
1.1 获取Python安装包
1.2 建立Python安装目录
- 本文拟用/usr/local/python3.8作为Python的安装目录,并确保该目录存在
1.3 安装依赖包
# yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
# yum install install gcc libffi-devel zlib*
1.4 编译安装包
- 进入Python安装包的下载目录,解压缩,进入解压缩后的目录,进行编译安装
# tar -Jxvf Python-3.8.6.tar.xz
# cd Python-3.8.6
# ./configure --prefix=/usr/local/python3.8
# make && make install
1.5 创建软链接
# ln -s /usr/local/python3.8/bin/python3 /usr/bin/python3
# ln -s /usr/local/python3.8/bin/pip3 /usr/bin/pip3
2. 遇到的问题
2.1 SSL模块不可用的警告
2.1.1 使用–with-openssl扩展命令重新编译Python安装包
- 由于CentOS7.9系统已安装了openssl,且安装路径为/usr/bin/openssl,所以使用自带的openssl 1.0.2版本
# openssl version
# cd Python-3.8.6
# ./configure --prefix=/usr/local/python3.8 --with-openssl=/usr/local/openssl
# make && make install
- 如果执行完上述流程之后,同样的警告仍然存在,则安装更高版本的openssl
① 下载并安装新版本的openssl# wget https://www.openssl.org/source/openssl-1.1.1o.tar.gz
# tar -zxvf openssl-1.1.1o.tar.gz
# cd openssl-1.1.1o
② 编译安装# ./config --prefix=/usr/local/openssl
# make && make install
③ 备份原版本openssl,以防万一# mkdir -p ~/backup/openssl_bak/bin
# mkdir ~/backup/openssl_bak/include
# mv /usr/bin/openssl ~/backup/openssl_bak/bin
# mv /usr/include/openssl ~/backup/openssl_bak/include
④软链接新版本openssl# ln -s /usr/local/openssl/include/openssl /usr/include/openssl
# ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
# ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/local/lib64/libssl.so
⑤修改ld.so.conf文件且使之生效# echo "/usr/local/openssl/lib" >> /etc/ld.so.conf
# ldconfig -v
# openssl version
⑥重新执行Python编译的步骤,参考1.4
2.1.2 旧脚本包装器调用pip的警告
- 之所以警告旧脚本包装器调用pip,是因为在1.5步骤中只创建了指向Python3.8新版本的软链接,没有创建新版本pip3的软链接,而使用原Python3.6版本的pip3就会报上述的警告。
- 备份/usr/bin下原版本的pip3,重新创建当前版本的pip3软链接后,不再有警告。
- 值得一提的是,CentOS自带的python2.7版本没有安装对应版本的pip。