Ubuntu14.04编译安装Python3.8及配置支持SSL(HTTPS)功能
一、系统环境介绍
二、安装编译Python3.8需要的依赖环境
sudo apt install -y wget build-essential libreadline-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev libffi-dev zlib1g-dev
等待自动下载、安装完成即可(整个大概需要200多MB,如果下载较慢,可以换成清华源再下载,这样会快很多)
安装完后,最后部分输出如下,一切正常:
三、编译安装libressl构建【Python支持SSL(HTTPS功能)】的所需环境
1、下载源码(这里以libressl-3.0.2为例)
wget https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/libressl-3.0.2.tar.gz --no-check-certificate
2、解压源码
tar -zxvf libressl-3.0.2.tar.gz
解压完后,会得到一个源码目录,效果如下:
3、配置安装路径
sudo mkdir -p /usr/local/ssl/libressl
4、配置编译参数
cd libressl-3.0.2
进入目录后,就瞄一眼,哈哈:
执行配置:
./configure --prefix=/usr/local/ssl/libressl
–prefix指定的是libressl安装的路径,可以自由更改,后面需要用到这个路径
配置完成后,无报错,最后输出效果如下:
5、编译、安装
sudo make && sudo make install
注意这是两个双sudo操作,此过程需要等一小会儿
过程无报错,最后输出如下:
6、将编译安装生成的libressl相关库添加到系统模块共享库中
注意:因为需要把内容输出到系统配置,因此需要切换到root用户,再执行,否则会报无权限错误。
su root
echo /usr/local/ssl/libressl/lib >> /etc/ld.so.conf.d/libressl-3.0.2.conf
效果如下(注意图中红圈部分):
7、验证需要的库已经添加成功
sudo ldconfig -v
输出如下: 可以看到,上图红圈部分就是libressl的相关依赖库。以上红圈输出就表示编译python3.8中支持ssl功能需要用到的libressl库已经添加成功。
四、编译、安装Python3.8
1、下载Python3.8源码(这里以Python3.8.6为例)
退回到用户目录
cd ~
wget https://www.python.org/ftp/python/3.8.6/Python-3.8.6.tgz
下载完成后,效果如下:
2、解压源码
tar -xvzf Python-3.8.6.tgz
3、配置编译参数(重点)
进入源码目录
cd Python-3.8.6
执行配置
./configure --prefix=/usr/local/python/python3.8 --with-openssl=/usr/local/ssl/libressl
这里–prefix路径是指定Python3.8安装的路径,–with-openssl的路径是刚刚上一步安装好的libressl的安装路径
过程无报错,最后输出如下:
4、编译、安装
sudo make && sudo make install
此过程需要等一小会儿
过程无报错,最后输出效果如下:
5、测试是否已经安装成功
因为上面配置步骤把python3.8的安装目录设置成 /usr/local/python/python3.8/ 了,而此目录也没有配置到系统环境变量PATH中,所以需要先切换到安装目录下的bin/:
cd /usr/local/python/python3.8/bin/
然后ls,瞄一眼: 可以看到Python3.8已经安装成功到指定目录了
执行:
./python3.8 -V
输出如下: 可以看到输出的版本信息就是我们需要的Python 3.8。Good job!!!
进入Python3.8命令行,然后来一个经典的hello world打印:
./python3.8
一切OK,一切正常,Python 3.8 Go Go Go!!!!!
接下来我们来验收标题所说效果,也就是SSL(HTTPS)功能的测试。
那怎么测试呢?很简单,进入python3.8命令行终端,然后输入import ssl,回车:
1、如果无输出,表示SSL(HTTPS)功能正常有效;
2、如果报错输出,那SSL(HTTPS)功能模块不能用,那看看具体什么错误(这里一般是ModuleNotFoundError),看看有没有遗漏什么步骤。还不行的话,Google/Stackoverflow/CSDN/博客园/等着你,哈哈哈。
下面我们来测试一下: 输出无报错,Nice!!!
到这里就结束了,完美撒花~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
一些推荐的配置(非必须)
1、配置系统环境变量
因为我们配置的Python3.8的安装路径不在系统变量PATH中。 所以目前我们使用Python3.8,只能先切换到安装目录再执行,显然不是我们所期望的。
那么,我们可以将程序目录/usr/local/python/python3.8/bin 添加到系统变量,这样我们就可以在任意路径使用Python3.8了:
PATH=/usr/local/python/python3.8/bin:$PATH
执行后,再次在命令行输入python3.8,发现可以用了!!!: 也就是说,从现在起,我们可以在任何目录下使用Python3.8了,而不是需要切换到安装目录(bin/)再使用。Nice!!!!
2、配置Python3.8为系统默认Python程序
因为在我安装的Ubuntu 14.04服务器版系统中已经默认内置了python2.7和python3.4。那么
1)、在终端中输入python: 打开的是Python2.7版本的。
2)、在终端中输入python3: 打开的是Python3.4版本的。
显然,现在系统默认的python程序是2.7版本的。那怎么把我们新安装的Python3.8版本设置为默认Python程序呢?这样做:
update-alternatives --list python
输出显示没有任何python版本添加到update-alternatives版本管理中。
那么我们就先将系统现在已经安装的python2.7,python3.4,python3.8都添加到update-alternatives中:
首先是Python2.7
whereis python2.7
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 100
这里的100是优先级值,值越大,优先级越高
执行效果: 以此类推,分别添加Python3.4和Python3.8:
Python3.4:
whereis python3.4
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.4 200
Python3.8:
我们的Python3.8程序目录在/usr/local/python/python3.8/bin,所以
sudo update-alternatives --install /usr/bin/python python /usr/local/python/python3.8/bin/python3.8 300
添加完成后,我们新安装的Python3.8就变成了系统的默认Python版本了。我们可以测试一下,在控制台输入python,回车: 可以看到,我们进入的是新安装的Python3.8程序,优先级配置生效了,NICE!!!!!。
有道友可能会问,我现在有了Python2.7,Python3.4,Python3.8的版本了,如果我想自由的切换默认版本,应该怎么做?
好,不如我们回过头再次执行上面提到过的一个命令:
update-alternatives --list python
执行输出如下: 可以看到我们所有已经安装的Python版本刚刚都已经通过update-alternatives --install 命令添加到了版本管理中,如果还有其他版本也是这么添加。
现在我默认版本是Python3.8,我想切换到Python3.4,怎么做?
执行:
sudo update-alternatives --config python
输出效果如下: 显而易见,输出说明了python3.8是默认的python版本。
这里就是可以选择版本作为默认版本的,然后我们输入2(对应版本就是python3.4),然后回车,这样我们就将Python3.4设置为默认版本,其他版本也是一样的操作。
来看看切换后效果: 完结撒花~
题外话
其实写这篇文章是因为我需要用到git-repo工具来拉取一些源码,然后怎么了~
欸,就是git-repo现在不支持python3.5以下的版本了,然后就想着安装python3.8的,在ubuntu14.04下,使用包管理工具怎么都安装不了python,什么源切换都试过了,也不行(我猜是墙的问题,有的源国内没有镜像)。
既然自动安装不行,那我手动还不行???
然后就开始搞啊搞啊搞啊了……,编译安装好了之后再次运行git-repo,报错……
说什么unkown url type https什么的,阿巴阿巴。
然后东找西找,又说这个问题,又说那个问题,其实就是python没有带ssl模块,也就是编译的时候没有配置ssl库。
当时搞了两个多小时,才搞好,也才有了这么文章。
So,值得记录。
如果觉得对你也有帮助,欢迎点赞,评论,收藏!!!Nice!!!!
|