python3 编译安装时默认没有添加ssl模块,但是使用时有些库需要用到,你可以用python3进入命令行后:
import ssl
测试一下是否可以成功加载。
如果不能加载,这时需要重新编译python,进入你的python下载目录,打开Modules/Setup文件:
vim /usr/local/Python-3.7.4/Modules/Setup
然后把下面的几行注释打开:
# 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
然后运行:
./configure
make
此时有可能会报错:
./Modules/_ssl.c: In function ‘SSL_SESSION_get_ticket_lifetime_hint’:
......
make *** modules/_ssl.o error 1
可能的两个原因:
1. openssl的路径不对,上面打开注释的这一行:
SSL=/usr/local/ssl
可以设置openssl的路径,找到本机openssl的位置,然后修改一下试下。
2. 这个可能就是本机的openssl版本过低,导致编译失败了,可以直接用如下命令查看一下:
openssl version
我在ubuntu机器上查看还是 0.8的版本,顺便升级了一下,下载连接:
https://www.openssl.org/source/openssl-1.1.1d.tar.gz
cd /usr/local
wget https://www.openssl.org/source/openssl-1.1.1d.tar.gz
tar -zxvf openssl-1.1.1d.tar.gz
cd openssl-1.1.1d
./configure
make && make install
安装后openssl的默认路径为:
/usr/local/ssl
到上一步openssl就算安装好了,但是还无法使用,需要通过软链接的方式将新旧版本就行替换,依次运行下列命令:
sudo mv /usr/bin/openssl /usr/bin/openssl.old //将旧版本的openssl进行备份
sudo ln -s /usr/local/bin/openssl /usr/bin/openssl //将新版本的openssl进行软链接
新建或修改 /etc/ld.so.conf.d/libc.conf 配置文件,添加如下内容:
/usr/local/lib //将openssl的安装路径加入配置中
然后运行如下命令:
ldconfig //重新加载配置
此时在用openssl version命令就可以看到已经是自己安装的新版本了,这样也方便切换为老版本。
然后把上面打开注释中的:
SSL=/usr/local/ssl
改为
SSL=/usr/local
再在python源码目录下依次执行:
make clean
./configure
make && make install
就可以将ssl模块编译进来了。