Centos7配置完整Python3(Python 3.8.5)最强攻略!

写在前面

Linux上配置Python3的教程已经烂大街了,随便搜搜都一大堆,但是都0202年了,竟然没有什么教程能够完整介绍安装完全版Python的流程,装的全是残缺版的,结果一跑程序就显示“No Module name xxx”,发现少装了东西,重新安装后又把Python编译个十遍八遍,效率极其低下。
本文就从刚拿到一台Centos7服务器开始,讲述配置完整版Python的流程。

准备阶段

Linux配置Python一般使用源码编译安装的方式,最万能也最坑,那么在开始前可以首先使用

sudo yum -y update  # 可以不做

先更新下,升级所有包同时也升级软件和系统内核,如果担心系统内核发生变化可以不执行该命令,接下来安装一些工具

sudo yum groupinstall -y 'Development Tools'
sudo yum install -y gcc openssl-devel bzip2-devel libffi-devel sqlite-devel

其中

  • Python得靠gcc编译
  • openssl-devel是配合openssl在Python的ssl模块发挥作用的,如果不装会报错No module named _ssl
  • libffi-devel如果不装的话,会报错No module named '_ctypes'
  • sqlite-devel如果不装的话,会报错No module named _sqlite3
    如果没有特殊情况还是装一下,虽然不装也能用,但是何乐而不装呢?
    在这个阶段使用yum安装会出现一些问题,我这里总结了一个

[Errno 14] HTTP Error 404 - Not Found

可以先尝试这两个命令

sudo yum clean all
sudo rpm --rebuilddb

如果还是不管用的话,可能是yum源失效,这边建议先更换一下国内的yum源:执行这篇文章里的Yum换源推荐步骤即可

第一步 => 升级openssl

如果你的Python模块不需要使用_ssl模块的话,其实可以直接去看第二步,但是但凡你的Python程序涉及到对Web的请求,比如说socket或者小爬爬等,建议还是走完第一步再走第二步。为什么我们要升级openssl呢?因为Centos7自带的时间太久远了,比较新的Python版本用的是更新的openssl库了,你可以输入

openssl version

来查看你的openssl版本,如果你的版本是1.1.1以下的,建议都对其进行升级,所以我们到openssl的github上面来下载最新的版本,也可以使用

wget http://github.com/openssl/openssl/archive/OpenSSL_1_1_1g.tar.gz  # 我目前最新版本是1.1.1g
tar -xvf  OpenSSL_1_1_1g.tar.gz 

来直接下载到服务器上并进行解压,解压之后来到解压好的目录

./config --prefix=/usr/local/openssl  # -prefix指定安装的路径,一定一定要指定!不然安装后生成的文件不全
make -j24  # 多核心加快编译
sudo make install

这时候我们的新版openssl就安装好了,我们可以通过命令

whereis openssl

查看在/usr/local/openssl(你刚才–prefix指定的路径)下是否有openssl,之后我们需要使用新的openssl对旧的进行替换

sudo mv /usr/bin/openssl /usr/bin/openssl.old  # 先备份一下旧的,可以通过上条命令找出所有openssl位置
sudo mv /usr/lib64/openssl /usr/lib64/openssl.old  # 我是64位系统所以都在lib64文件夹下
sudo mv /usr/lib64/libssl.so /usr/lib64/libssl.so.old  # 你需要注意你的openssl是在lib文件夹下还是在lib64文件夹下

之后给我们安装位置的openssl创建一个软连接,注意连接的时候一定要使用绝对路径,不然会出现符号链接层数太多的问题

# ln -s 你prefix指定的路径/bin/openssl /usr/bin/openssl 
# ln -s 你prefix指定的路径/include/openssl /usr/include/openssl
# ln -s 你prefix指定的路径/lib/libssl.so /usr/lib64/libssl.so
sudo ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl  # 我安装在/usr/local/openssl下
sudo ln -s /usr/local/openssl/include/openssl /usr/include/openssl
sudo ln -s /usr/local/openssl/lib/libssl.so /usr/lib64/libssl.so

这时候不要着急,还有两个openssl需要使用的库没有连接过去,可以使用命令

ldd /usr/local/openssl/bin/openssl

如果遇到了下图的情况,但凡出现not found就说明库没有连接好
在这里插入图片描述
这时候我们需要把这两个库连接过去就可以了

sudo ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1
sudo ln -s /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1

这时候再执行ldd指令会发现所有的库都找到了
在这里插入图片描述
这时候输入openssl version查看下版本:
在这里插入图片描述
已经是最新的了,到此openssl升级完成

第二步 => 安装Python

我们直接从Python官网选择相应的版本下载源码点这里
或者

wget https://www.python.org/ftp/python/3.8.5/Python-3.8.5.tar.xz
tar -xvf Python-3.8.5.tar.xz  # 解压

进入解压后的目录后,我们需要做一些修改

cd Modules/
vim Setup

找到下图所在的位置,把这四行的注释打开(大概在57%处,或者直接用输入/ssl进行搜索)
在这里插入图片描述
第一行把SSL=后面的路径改成openssl安装的路径,之后回到Python源码目录

./configure --prefix=/usr/local/python3  # 指定你安装的Python位置,建议在/usr/local下
make -j24 
sudo make install

这样我们的Python就安装好了,还需要做最后的配置,没错,软链接~

sudo ln -s /usr/local/python3/bin/python3 /usr/bin/python3
sudo ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3

现在我们已经可以在控制台使用python3这个指令了
在这里插入图片描述
可以发现此时在里面导入ssl模块和sqlite3时不会报错
在这里插入图片描述

Error in `./python’: free(): invalid next size (fast)

这里我介绍一下这个不常见的错误,很不幸被我遇到了,这个问题是在makePython的时候出现的,这说明Python没有编译成功,其中free()指针指向了不该指的内存单元,而这个错误是来自于openssl的,如果你也不幸遇到了这种情况,建议卸载干净之后重新安装openssl,或者直接重装系统。

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页