1.首先在一台可联网的外部CentOS7机器A上下载相关依赖包
##安装yum工具
[root@bigdata01 luocb]# yum -y install yum-utils
[root@bigdata01 luocb]# mkdir python3.9_rpm
##只下载相关依赖,不进行安装;指定保存目录为 ./python3.9_rpm
[root@bigdata01 luocb]# yumdownloader --resolve --destdir ./python3.9_rpm zlib-devel bzip2-devel openssl openssl-devel ncurses-devel epel-release gcc gcc-c++ xz-devel readline-devel gdbm-devel sqlite-devel tk-devel
##把下载完的依赖包压缩好
[root@bigdata01 luocb]# tar -zcvf python3.9_rpm.tar.gz ./python3.9_rpm
##下载python3.9.5的源码包
[root@bigdata01 luocb]# wget --no-check-certificate https://www.python.org/ftp/python/3.9.5/Python-3.9.5.tgz
[root@bigdata01 luocb]# wget --no-check-certificate https://www.openssl.org/source/openssl-1.1.1g.tar.gz
通过上面的操作,会得到离线安装python3.9所需的3个压缩包:
离线安装包
2.开始离线安装Python3.9
离线安装依赖包
[root@master luocb]# mkdir /home/python3
[root@master luocb]# cd /home/python3
[root@master python3]# tar -zxvf python3.9_rpm.tar.gz
[root@master python3]# cd python3.9_rpm
[root@master python3.9_rpm]# rpm -Uvh ./*.rpm --nodeps --force
编译安装python3.9源码包
##编译openssl
[root@master luocb]# tar -zxvf openssl-1.1.1g.tar.gz
[root@master luocb]# cd openssl-1.1.1g
[root@master openssl-1.1.1g]# ./config --prefix=/usr --openssldir=/etc/ssl --libdir=lib no-shared zlib-dynamic
[root@master openssl-1.1.1g]# make && make install
[root@master openssl-1.1.1g]# openssl version
OpenSSL 1.1.1g 21 Apr 2020
[root@master openssl-1.1.1g]# rm /usr/lib64/libssl.so
[root@master openssl-1.1.1g]# rm -rf /usr/lib64/libcrypto.so
[root@master openssl-1.1.1g]# ln -s /usr/local/lib64/libssl.so.1.1 /usr/lib64/libssl.so
[root@master openssl-1.1.1g]# ln -s /usr/local/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so
[root@master openssl-1.1.1g]# ln -s /usr/local/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1
[root@master openssl-1.1.1g]# ln -s /usr/local/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
[root@master openssl-1.1.1g]# rm /lib/libssl.so
[root@master openssl-1.1.1g]# rm /lib/libcrypto.so
[root@master openssl-1.1.1g]# ln -s /usr/local/lib64/libssl.so.1.1 /lib/libssl.so
[root@master openssl-1.1.1g]# ln -s /usr/local/lib64/libcrypto.so.1.1 /lib/libcrypto.so
##编译python
[root@master luocb]# cd /home/python3
[root@master python3]# tar -zxvf Python3.9.5.tar.gz
[root@master python3]# cd Python3.9.5
##修改openssl配置项,不修改这里的话容易出现编译安装后python依赖的openssl与系统openssl的版本不一致
[root@master python3]# vi Modules/Setup
214 #SSL=/usr/local/ssl
215 _ssl _ssl.c \
216 -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
217 -L$(SSL)/lib -lssl -lcrypto
(215-217行原本是带注释#号的,这里需要去掉,得到上面的内容,保存退出)
##编译安装
[root@master Python3.9.5]# ./configure --prefix=/usr/local/python3 --with-openssl=/usr/bin/openssl
[root@master Python3.9.5]# make && make install
##创建link
[root@master Python3.9.5]# ln -s /usr/local/python3/bin/python3 /usr/bin/python
[root@master Python3.9.5]# ln -s /usr/local/python3/bin/pip3 /usr/bin/pip
##测试安装结果
[root@master Python3.9.5]# python -V
Python 3.9.5
[root@master Python3.9.5]# pip -V
pip 21.1.1 from /usr/local/python3/lib/python3.9/site-packages/pip (python 3.9)
##检查python依赖的openssl版本
[root@bigdata02 Python-3.9.5]# python -c "import ssl; print(ssl.OPENSSL_VERSION)"
第一个Python程序