更新
使用这种方式安装后,pip3 install uwsgi会安装失败,看错误提示应该跟openssl有关系,现在还没找到解决办法,所以谨慎安装Python3.7.3。
之前源码编译安装时,能安装成功但是使用pip3就会提示ssl模块有问题,当时有别的事情耽误了,现在重新源码安装时,终于解决了这个ssl模块的问题,现在就记录一下。 参考文档:cloud.tencent.com/developer/a…
说明
ssl:通讯链路协议的附加层
openssl:一个C语言函数库,是对ssl协议的实现
安装高版本的openssl
Python3.7开始,为了安全性考虑,要求使用openssl1.0.2之后的版本。而Centos6.10的openssl版本是1.0.1e。
[root@zzz ~]# which openssl
/usr/bin/openssl
[root@zzz ~]# openssl version
OpenSSL 1.0.1e-fips 11 Feb 2013
查看yum能安装的openssl的版本,发现yum最高也只能安装openssl 1.0.1e。
[root@zzz ~]# yum info openssl
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
已安装的软件包
Name : openssl
Arch : x86_64
Version : 1.0.1e
Release : 57.el6
Size : 4.1 M
Repo : installed
From repo : anaconda-CentOS-201703281317.x86_64
Summary : A general purpose cryptography library with TLS implementation
URL : http://www.openssl.org/
License : OpenSSL
Description : The OpenSSL toolkit provides support for secure communications
: between machines. OpenSSL includes a certificate management tool
: and shared libraries which provide various cryptographic
: algorithms and protocols.
......
所以,只能手动编译安装了。
1、下载openssl,打开https://www.openssl.org/source/, 往下拉能看到openssl的几个版本。

在这里我们下载1.1.1c这个版本,右键,复制链接地址,然后:
[root@iZwz9dl1yjtmeu2a25z6p5Z ~]# wget https://www.openssl.org/source/openssl-1.1.1c.tar.gz
2、编译安装openssl1.1.1c
[root@zzz ~]# tar -zxvf openssl-1.1.1c.tar.gz
[root@zzz ~]# cd openssl-1.1.1c
[root@zzz openssl-1.1.1c]# ./config --prefix=/usr/local/openssl
[root@zzz openssl-1.1.1c]# make && make install
3、安装完成后,替换库文件和链接文件
[root@zzz ~]# cp -p /usr/local/openssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1
[root@zzz ~]# cp -p /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
[root@zzz ~]# rm -rf /usr/bin/openssl
[root@zzz ~]# ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
安装Python3.7.3
1、yum安装依赖的第三方库
[root@zzz ~]# yum -y install zlib-devel bzip2-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make libffi-devel tk-devel
2、下载 打开https://www.python.org/downloads/source/,下载Python3.7.3的gz包。

右键,复制链接地址,然后:
[root@zzz ~]# wget https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tgz
[root@zzz ~]# tar -zxvf Python-3.7.3.tgz
[root@zzz ~]# cd Python-3.7.3
这个链接可能会比较慢,可以找国内的镜像下载,只是我习惯从官网下。
3、修改Modules/Setup.dist文件 找到跟ssl相关的5行,关闭注释,修改为新版本的openssl。
[root@zzz Python-3.7.3]# vi Modules/Setup.dist

修改为:
# 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/openssl
_ssl _ssl.c \
-DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
-L$(SSL)/lib -lssl -lcrypto
实际就是去掉注释,然后将SSL=/usr/local/ssl改为SSL=/usr/local/openssl。 保存,退出。
4、编译安装
[root@zzz Python-3.7.3]# ./configure --prefix=/usr/local/python3
这里很多文档都说需要加上--enable-optimizations这个参数,作用是优化选项,性能大概有10%的提升,跟LTO,PGO等有关,但是我加上之后,每次都会在0:14:57 load avg: 0.63 [307/416] test_socket这里卡住,试了三次,等了几个钟都还是在这里,我也没找到什么文档来解决,所以就先去掉这个参数了,如果有解决办法,请告知我,万分感谢!!! 不加--enable-optimizations,最后会提示:

make编译安装
[root@zzz Python-3.7.3]# make && make install
等待安装。
5、将python3的bin目录添加到.bash_profile文件
[root@zzz ~]# vi ~/.bash_profile
在PATH后添加/usr/local/python3/bin:
PATH=$PATH:$HOME/bin:/usr/local/python3/bin
保存退出后,执行:
[root@zzz ~]# source ~/.bash_profile
测试:
[root@zzz ~]# python3
Python 3.7.3 (default, Jun 17 2019, 14:54:54)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-23)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
Python3.7.3安装成功。