终于成功了! 从搭建centos7.6服务器到安装python3.7 ,折腾了我一个星期。看过无数的经验贴和博客,还看了很多Stack OverflowUnix & Linux Stack Exchange上面的很多解决办法,特此总结出这篇博客,一方面以留后用,另一方面也是想给大家参考一下。

1.安装相关依赖 

1.1

下载依赖的官方网站 https://pypi.org ,可以在这里面根据依赖包的名字搜索,下载需要的离线版本

yum install gcc openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel

需要安装很多,如果编译安装python的时候出错了,就根据错误信息提示安装对应的依赖

1.2
在centos下安装python3.7.0以上版本时报错ModuleNotFoundError: No module named ‘_ctypes‘的解决办法:3.7版本需要一个新的包libffi-devel,安装此包之后再次进行编译安装即可:

yum install libffi-devel -y

2.下载
python官网下载地址
https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz

3.解压

tar -xf Python-3.7.0.tgz

4.安装编译

cd Python-3.7.0
./configure --prefix=/usr/local/python3 --enable-optimizations --with-ssl


#第一个指定安装的路径,不指定的话,安装过程中可能软件所需要的文件复制到其他不同目录,删除软件很不方便,复制软件也不方便. #第二个可以提高python10%-20%代码运行速度. #第三个是为了安装pip需要用到ssl,后面报错会有提到.


make && make install      //安装、编译

5.添加软链接

ln -sv /usr/local/python3/bin/pip3 /usr/bin/pip
ln -sv /usr/local/python3/bin/python3 /usr/bin/python

如果显示文件或目录已存在,则应先删除之前的软链接

rm -rf /usr/bin/pip
rm -rf /usr/bin/python

然后再重新执行上面的添加软链接命令。

6.查看安装的python版本

python -V
pip -V

7.解决安装python3.7之后,yum无法使用问题

升级python后会发现yum命令不能够使用了,因为yum命令使用并且依赖python2.6,所以我们要更改它的参数,保存并退出

vim /usr/bin/yum

将第一行

#!/usr/bin/python

改成

#!/usr/bin/python2.7

8.使用yum 出现File "/usr/libexec/urlgrabber-ext-down", line 28 解决方案
使用

vi /usr/libexec/urlgrabber-ext-down

将第一行

#!/usr/bin/python

改为

#!/usr/bin/python2

9.CentOS7中安装pip的方法
安装epel-release

yum -y install epel-release

安装python-pip

yum -y install python-pip

下面这几个步骤可以根据需要来决定是否采用

修改pip源
cd ~  #回到家目录
mkdir .pip  #创建.pip目录
cd .pip
touch pip.conf  #创建pip.conf配置文件
vi pip.conf
#在配置文件中增加如下内容
[global]
index-url = http://pypi.douban.com/simple
[install]
trusted-host = pypi.douban.com
#配置文件保存
升级pip
pip install --upgrade pip
检查pip版本
pip --version

10.python3安装完,出现 No module named '_ssl',解决方案
1. 命令 rpm -qa | grep openssl 查看你系统的 openssl 版本
其中 openssl-1.0.***x86_64 和openssl-devel***x86_64 这两个是必须的,如果没有,就去下载。
修改文件: Python-3.7.0/Modules/Setup.dist  
        放开下面5行
        # 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/ssl              #前面注释去掉,并把路径改成/usr/local/     这点很关键
        _ssl _ssl.c \                                                    #前面注释去掉
            -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \        #前面注释去掉
            -L$(SSL)/lib -lssl -lcrypto                                      #前面注释去掉
开始重新安装 openssl


如果觉得有帮助,那就帮我点个赞吧,谢谢帅气/美丽的你