在Linux中编译安装Python3

2019年6月27日 / 95次阅读 / Last Modified 2019年8月8日
安装配置

在Linux系统中编译安装Python3,我想是一个Python学习者必经的一个环节。

你可以使用Ubuntu自带的Python3,不过你不能自由的控制版本,还要单独安装pip3,如果你想升级pip3,还会出现一些让人不愉快的使用问题。而在CentOS系统中,默认只有Python2,通过yum安装Python3,也同样面临版本落后以及pip3的问题。如果不自己编译安装,还有什么别的方法来一直保持使用最新的版本呢?!除非你用Win系统。

本文介绍如何在Ubuntu和CentOS这两个常用的LFS系统中,编译安装Python3的方法。主要的区别是,在这个两个平台上安装的依赖库不太一样(名称不一样)!在Linux系统中编译安装软件,最大的困扰,可能就是安装各种依赖库了。为了解决这个问题,yum,apt,docker等技术都出来了......

在CentOS中安装Python3需要的依赖库

$ sudo yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel libffi-devel expat-devel gdbm-devel xz-devel db4-devel libpcap-devel

如果系统已经存在上面的某些库,以上安装指令只是对其进行升级,没有别的影响。

在Ubuntu中安装Python3需要的依赖库

$ sudo apt install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libbz2-dev zlib1g-dev libffi-dev liblzma-dev

安装GCC

CentOS的minimal版本,以及Ubuntu,都没有预装gcc,如果你用的是这两个版本,需要确保系统有gcc编译器可以使用。安装和查看gcc的方法:

$ sudo yum install gcc  # install gcc in centos
$ sudo apt install gcc  # install gcc in ubuntu
$ which gcc  # check if gcc is there
$ gcc --version  # check gcc version

下载Python3源码并解压

Python3的官方源码下载页面是:https://www.python.org/downloads/

使用curl或wget下载,然后解压:

$ curl -O https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tgz
$ wget https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tgz
$ tar zxf Python-3.7.3.tgz

执行configure

进入上一步的解压目录,然后执行configure:

$ cd Python-3.7.3
$ ./configure --prefix=/usr/local/python-3.7

然后,你会看到一推checking...在安装Python3需要的依赖包的情况下,不会有错误提示出现。--prefix的作用是给出一个安装路径。

我们可以在configure的时候,增加一个优化参数,--enable-optimizations。增加这个参数,会启动编译器的PGO( Profile guided optimization )优化,后续进行make的时候,Python3会执行一大推很费时费力的test来保证优化没有问题。如果你不赶时间,可以考虑加这个这个参数,因为你可以让Python的解释器的执行速度增加大概10%-20%。

$ ./configure --prefix=/usr/local/python-3.7 --enable-optimizations

make和install

最后,我们执行make和install的指令。

$ make && sudo make install

make install 前要有sudo,因为我们在configure的时候,指定的安装路径为系统路径,不是用户的/home/user路径。

创建符号链接

make和install成功之后,Python3就已经安装在了这个路径下:/usr/local/python-3.7。这个路径下的bin目录,包含了我们需要的程序:

$ pwd
/usr/local/python3.7/bin
$ ls -l
total 24720
lrwxrwxrwx. 1 root root        8 May 23 21:29 2to3 -> 2to3-3.7
-rwxr-xr-x. 1 root root      111 May 23 21:29 2to3-3.7
-rwxr-xr-x. 1 root root      251 May 23 21:29 easy_install-3.7
lrwxrwxrwx. 1 root root        7 May 23 21:29 idle3 -> idle3.7
-rwxr-xr-x. 1 root root      109 May 23 21:29 idle3.7
-rwxr-xr-x. 1 root root      233 May 23 21:29 pip3
-rwxr-xr-x. 1 root root      233 May 23 21:29 pip3.7
lrwxrwxrwx. 1 root root        8 May 23 21:29 pydoc3 -> pydoc3.7
-rwxr-xr-x. 1 root root       94 May 23 21:29 pydoc3.7
lrwxrwxrwx. 1 root root        9 May 23 21:29 python3 -> python3.7
-rwxr-xr-x. 2 root root 12620752 May 23 21:27 python3.7
lrwxrwxrwx. 1 root root       17 May 23 21:29 python3.7-config -> python3.7m-config
-rwxr-xr-x. 2 root root 12620752 May 23 21:27 python3.7m
-rwxr-xr-x. 1 root root     3115 May 23 21:29 python3.7m-config
lrwxrwxrwx. 1 root root       16 May 23 21:29 python3-config -> python3.7-config

创建符号链接的目的,是为了让我们在系统中的任何位置(路径)下,都可以直接输入python3来启动python解释器。为了达到这个目的,我们需要在/usr/bin路径下放置符号链接文件,指向上面的安装路径。

$ sudo ln -s /usr/local/python3.7/bin/python3.7 /usr/bin/python3
$ sudo ln -s /usr/local/python3.7/bin/pip3.7 /usr/bin/pip3

Ubuntu系统自带的Python3也是一个符号链接,指向同路径下的python3.x,必须要先删除这个符号链接,才能创建新的。同目录下的python3.x,这个信息也许在你需要恢复使用系统自带python3时,能用得上。

编译安装成功

按照以上步骤,编译安装就成功了,最后我们来做一点检查:

$ readlink /usr/bin/python3
/usr/local/python3.7/bin/python3.7
$ readlink /usr/bin/pip3
/usr/local/python3.7/bin/pip3
$ python3 -V
Python 3.7.3
$ pip3 -V
pip 19.0.3 from /usr/local/python3.7/lib/python3.7/site-packages/pip (python 3.7)

以上检查了我们创建的符号链接,并运行python3和pip3这两个程序,查看其对应的版本号。注意我们创建的符号链接是python3和pip3,后面都有3,这是为了与系统中的python(版本2)共存。

-- EOF --

本文链接:https://www.pynote.net/archives/384

留言区

《在Linux中编译安装Python3》有2条留言

电子邮件地址不会被公开。 必填项已用*标注

  • 麦新杰

    CentOS8 minimal版本,默认没有make工具,还需要安装。 [回复]

  • 麦新杰

    在CentOS8中安装python3的时候,提示db4-devel和libpcap-devel找不到了。。。 [回复]


前一篇:
后一篇:

More

麦新杰的Python笔记

Ctrl+D 收藏本页


©Copyright 麦新杰 Since 2019 Python笔记

go to top