解决pip is configured with locations that require TLS/SSL, however the ssl module in Python is not ...

一、遇到的问题

安装 python3.7 碰到此问题,安装好以后,执行 python3 安装django, 出现错误 ImportError: No module named _ssl 。 该错误表现在 pip install 时会报 pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.

在网上找了很多资料都不行,最后找到了一个方法是将 openssl 升级 到 1.1.x之后的版本是有效的。

二、升级过程

一、下载 openssl 编译安装

openssl 官方下载地址: https://www.openssl.org/source/

wget https://github.com/openssl/openssl/archive/OpenSSL_1_1_1d.tar.gz
tar -zxvf OpenSSL_1_1_1d.tar.gz

二、编译安装

进入openssl-OpenSSL_1_1_1d

cd  openssl-OpenSSL_1_1_1d

指定安装路径并编译

./config --prefix=/usr/local/openssl // 指定安装路径
make && make install

三、替换当前系统的旧版本 openssl 「先保存原来的」

mv /usr/bin/openssl /usr/bin/openssl.old
mv /usr/lib64/openssl /usr/lib64/openssl.old
mv /usr/lib64/libssl.so /usr/lib64/libssl.so.old
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/openssl/include/openssl /usr/include/openssl
ln -s /usr/local/openssl/lib/libssl.so /usr/lib64/libssl.so
echo "/usr/local/openssl/lib" >> /etc/ld.so.conf
ldconfig -v // 建立动态链接

四、最后查看当前系统 openssl 版本

openssl version

五、重新编译Python3.7

进入解压后的Python目录

cd Python-3.7.1
./configure --prefix=/usr/local/python3 --with-openssl=/usr/local/openssl
make install
ln -s /usr/local/python3/bin/python3 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3

六、查看是否安装成功

python3 -V

python 3.7.1********

pip3 -V

pip 10.0.1**********

[root@localhost Python-3.7.1]# python3
Python 3.7.1 (default, Sep 10 2020, 14:20:03) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-23)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>> django.VERSION
(3, 1, 1, 'final', 0)
>>> exit();