操作系统:Red Hat Enterprise Linux Server release 5.10
更新软件源
将源更新为清华源,详情参见:https://mirrors.tuna.tsinghua.edu.cn/help/centos/
安装、更新依赖
yum install -y gcc gcc44 zlib-devel python-setuptools readline-devel wget make perl
更新openssl
# 下载并配置安装
wget --no-check-certificate https://www.openssl.org/source/openssl-1.0.2q.tar.gz
tar zxvf openssl-*
cd openssl-*
./config -fpic shared && make && make install
# 安装完成后替换掉旧ssl,旧版本为0.9.8,在python3中无法正常加载、使用
# 旧版本备份;创建新1.0.2版本的链接
mv /usr/bin/openssl /usr/bin/openssl.old
ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/ssl/include/openssl /usr/include/openssl
# 将ssl链接库写入配置文件,ldconfig命令使之生效
echo "/usr/local/ssl/lib" >> /etc/ld.so.conf
ldconfig
注:openssl版本这里还选择1.0.x,使用过1.1.x安装失败因perl版本太低。rh5.x版本的perl最高为5.8.8,1.1.x版本最低perl版本需求为5.10.x 。对于perl的升级直接凌乱,折腾一下午决定不做,尽量少动其他依赖版本。因后续应用层还需要对perl有依赖,担心环境再不统一那就完蛋。
安装python
python使用3.6.1
官网下载、解压Python
修改其中文件:Python/Modules/Setup.dist ,大概在205行,去掉下面几行注释
# Socket module helper for socket(2)
_socket socketmodule.c
# Socket module helper for SSL support; you must comment out the other
# socket line above, and possibly edit the SSL variable:
#SSL=/usr/local/ssl
_ssl _ssl.c \
-DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
-L$(SSL)/lib -lssl -lcrypto
注:先记一下,后续的make altinstall后会报个警告,说_decimal模块安装失败,为了避免这个错误,需要使用gcc44进行编译安装,之前已安装了gcc44的依赖,此处安装前配置变量:
export CC=/usr/bin/gcc44
进入Python源码目录,配置、安装:
./configure --prefix=/opt/python3 --enable-shared
make altinstall
安装过程中会报错,忘记截图,后续再装时我注意截一下。大概意思为:Error: cannot found module lssl ;Error: cannot found module lcrypto 即找不到ssl模块、找不到crypto模块。创建新安装的openssl模块的软链接即可:
ln -s /usr/local/ssl/lib/libssl.so /usr/local/lib64/libssl.so
ln -s /usr/local/ssl/lib/libcrypto.so /usr/local/lib64/libcrypto.so
再执行python的make altinstall ,安装成功。
最后创建python3的软链接:
ln -s /opt/python3/bin/python3.6 /usr/local/bin/python3
ln -s /opt/python3/bin/pip3.6 /usr/local/bin/pip3
终端敲一下python3,即进入python shell ,引入ssl不报错,即安装成功。也可使用pip3 install reqeusts尝试看看有没有问题,不报错即成功。
更新pip3 ,更新为清华源:
pip3 install pip -U
pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
引用链接:
How to Enable OpenSSL 1.0.2.a (TLSv1.1 & TLSv1.2) on CentOS 5 & RHEL5