python3.6源码编译安装 & 解决SSL报错

从源码编译安装python3.6之后,用pip的时候可能会提示SSL错误,实际上是openssl和python的安装有问题,本文给出安装openssl和python3.6.6的完整过程。 

1、编译安装openssl

首先说明在python3.6编译的时候没有 --with-ssl 这个参数,python3.6.6源码中setup.py中有下面几行:

# Detect SSL support for the socket module (via _ssl)
        search_for_ssl_incs_in = [
                              '/usr/local/ssl/include',
                              '/usr/contrib/ssl/include/'
                             ]
        ssl_incs = find_file('openssl/ssl.h', inc_dirs,
                             search_for_ssl_incs_in
                             )

这说明了编译的时候会在/usr/local/ssl的子路经中寻找ssl的头文件,所以使用参数--prefix将openssl安装在/usr/local/ssl即可。

(1) 首先解压文件,然后进入openssl源码目录,按下面的命令进行编译安装

./config --prefix=/usr/local/ssl
sudo make
sudo make install

(2)添加动态链接库路径

打开文件 /etc/ld.so.conf
在文件末尾添加ssl动态链接库的路径 /usr/local/ssl/lib
sudo ldconfig
ldconfig -p | grep libssl.so.3   # 查看动态链接库是否存在

 2、编译安装python3.6.6

(1) 编译安装

在python源码目录中执行下面的命令

sudo ./configure --prefix=/opt/python3.6.6
sudo make
sudo make install

安装结束后将 /opt/python3.6.6/bin下的python3.6和pip3.6软链到/usr/bin即可。

(2)安装验证

执行 sudo pip3.6 install onnx 测试pip是否正常,如果出现下面的错误,尝试执行下面第(3)步的文件修改,并重新编译安装。

Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.",)':

(3) 解压并进入源码目录

修改文件 Modules/Setup,将下面所示的4行注释去掉(第209到212行)。网上有的文章说还需要修改Setup.dist,实际上我只修改了Setup,目前使用场景下没有出现问题。

207 # Socket module helper for SSL support; you must comment out the other
208 # socket line above, and possibly edit the SSL variable:
209 SSL=/usr/local/ssl
210 _ssl _ssl.c \
211         -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
212         -L$(SSL)/lib -lssl -lcrypto

有任何问题欢迎留言交流。 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值