Centos6.10源码编译安装Python3.7.3

2,270 阅读2分钟

更新

使用这种方式安装后,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的几个版本。

屏幕快照 2019-06-17 上午9.57.09

在这里我们下载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包。

屏幕快照 2019-06-17 上午10.09.34

右键,复制链接地址,然后:

[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 

屏幕快照 2019-06-17 下午12.52.20

修改为:

# 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,最后会提示:

屏幕快照 2019-06-17 下午2.53.19

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安装成功。