1.首先在一臺可聯(lián)網(wǎng)的外部CentOS7機器A上下載相關(guān)依賴包
##安裝yum工具
[root@bigdata01 luocb]# yum -y install yum-utils
[root@bigdata01 luocb]# mkdir python3.9_rpm
##只下載相關(guān)依賴寺擂,不進行安裝;指定保存目錄為 ./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配置項,不修改這里的話容易出現(xiàn)編譯安裝后python依賴的openssl與系統(tǒng)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行原本是帶注釋#號的亿扁,這里需要去掉捺典,得到上面的內(nèi)容,保存退出)
##編譯安裝
[root@master Python3.9.5]# ./configure --prefix=/usr/local/python3 --with-openssl=/usr/bin/openssl
[root@master Python3.9.5]# make && make install
##創(chuàng)建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
##測試安裝結(jié)果
[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程序