0%

Linux install python3

背景

​ 最近比较频繁的在虚拟机上搭建环境,由于默认虚拟机上都是部署的 Python2,所以涉及到了 Python3.7 的安装,此处进行一个过程的记录,方便后续的查看。

系统环境

1
2
3
4
5
[root@41c0abcd92d8 tools]# cat /etc/centos-release
CentOS Linux release 7.9.2009 (Core)

[root@41c0abcd92d8 tools]# uname -a
Linux 41c0abcd92d8 5.10.47-linuxkit #1 SMP Sat Jul 3 21:51:47 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

安装方法

方法一:yum install

优点:操作方便,安装快捷。如果仅需要Python3,但对具体小版本无要求的情况下, 推荐该方法
缺点:可选择的版本比较少。通过以下命令来看,基本上默认的就只有3.6.8的版本。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 查看可安装的python版本
[root@41c0abcd92d8 ~]# yum --showduplicates list python3 |expand
Installed Packages
python3.x86_64 3.6.8-18.el7 @updates
Available Packages
python3.i686 3.6.8-17.el7 base
python3.x86_64 3.6.8-17.el7 base
python3.i686 3.6.8-18.el7 updates
python3.x86_64 3.6.8-18.el7 updates

[root@41c0abcd92d8 ~]# yum list | grep python3
python3.x86_64 3.6.8-18.el7 @updates
python3-libs.x86_64 3.6.8-18.el7 @updates
python3-pip.noarch 9.0.3-8.el7 @base
python3-setuptools.noarch 39.2.0-10.el7 @base
libselinux-python3.x86_64 2.5-15.el7 base
python3.i686 3.6.8-18.el7 updates
...

方法二:通过源码安装

优点:可安装指定 Python3 的任意版本。
缺点:相对操作繁琐,需要先安装部分依赖,然后再进行编译安装。
具体操作步骤如下:

  1. 下载源码文件,推荐通过官网下载到本机,然后通过 docker cp 的方式复制到容器内。(直接在容器内下载速度可能较慢)

  2. 解压相应的源码包,此处使用的是 Python-3.7.7 版本。

    1
    [root@41c0abcd92d8 ~]# tar -xvf Python-3.7.7.tar.xz && cd Python-3.7.7/
  3. 编译

    1
    2
    [root@41c0abcd92d8 ~]# ./configure --prefix=/usr/local/python3
    [root@41c0abcd92d8 ~]# make && make install
  4. 软链接

    1
    [root@41c0abcd92d8 ~]# ln -s /usr/local/python3/bin/python3.7 /usr/bin/python3
  5. 修改pip的下载源,国内源下载更快。

    1
    2
    3
    4
    5
    6
    7
    mkdir ~/.pip & vi ~/.pip/pip.conf

    # 插入如下内容 (pip使用阿里的镜像源下载依赖更快)
    [global]
    index-url = http://mirrors.aliyun.com/pypi/simple/
    [install]
    trusted-host=mirrors.aliyun.com
源码安装可能遇到的问题

问题一:未安装gcc,执行上述的步骤时会报错:error: no acceptable C compiler found in $PATH

1
yum -y install gcc 

问题二:未安装zlib等依赖,执行上述步骤时会报错:zipimport.ZipImportError: can't decompress data; zlib not available

1
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel 

问题三:使用pip时报错,报错信息:broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/flask/

1
2
3
4
5
6
7
8
9
10
11
12
# 解决办法
# 去python3 的源码目录: /.../Python-3.7.7/Modules/Setup文件里修改部分注解。
# 比如我的目录为:/home/tools/Python-3.7.7/Modules, 将下放代码的内容的注解去掉。
# socket line above, and possibly edit the SSL variable:
SSL=/usr/local/ssl
_ssl _ssl.c \
-DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
-L$(SSL)/lib -lssl -lcrypto

# 重新编译安装
./configure --prefix=/usr/local/python3
make && make install
------------- 本 文 结 束 感 谢 您 的 阅 读 -------------