用Ubuntu从源代码安装Python

Python 3.8已经发布。对于Ubuntu 18.04来说,没有提供Python 3.8的软件包,所以如果想在Ubuntu的LTS版本上使用Python 3.8,就需要等到明年4月发布的Ubuntu 20.04。

在Python的情况下,并不需要着急升级版本,但如果想在Ubuntu 18.04上使用Python 3.8进行测试等操作,最基本的安装方法是从python.org下载源代码并进行自行编译。除此之外,如果是在数据科学方面,推荐使用Anaconda,但需要相当长的时间来掌握使用方法。此外,还可以使用ppa的deadsnakes方式进行安装。

如果从源代码构建的基本步骤。

根据官方手册的说明,通常情况下,您可以下载源代码并进行编译来进行安装。

./configure
make
sudo make install

此外,警告中提到:”make install” 可能会覆盖或破坏 python3 二进制文件。因此,推荐使用 “make altinstall” 来仅安装 “exec_prefix/bin/pythonversion”。因此,基本上命令如下:

./configure
make
sudo make altinstall

如果在Ubuntu上默认安装,它会被安装在usr/local目录下,因此不会覆盖或破坏任何现有文件。但由于PATH设置的优先级关系,python3命令将启动python3.8版本。如果发生错误,只需要在不慌不乱的情况下删除/usr/local/bin目录下的python3即可。另外,如果删除2to3、idle3、pip3、pydoc3和pyvenv这些文件,就相当于执行了make altinstall命令。

实际操作

安装依赖关系

使用build-essential软件包安装基本开发工具,并安装其他缺失的依赖关系。在服务器上通常不需要安装tk-dev,因为不会使用tk。但是,在使用PC或在服务器上安装了GUI并使用tk的情况下,应该额外添加tk-dev。

sudo apt update
sudo apt install build-essential
sudo apt install libreadline-dev libncursesw5-dev libssl-dev libsqlite3-dev libgdbm-dev libbz2-dev liblzma-dev zlib1g-dev uuid-dev libffi-dev libdb-dev

直到下载并安装Python为止。

wget https://www.python.org/ftp/python/3.8.0/Python-3.8.0.tar.xz
tar -xf Python-3.8.0.tar.xz
cd Python-3.8.0
./configure --enable-optimizations
make -s -j4
sudo make altinstall

由于执行”./configure”命令时会弹出这样的消息,因此我们在configure中加入了–enable-optimizations选项。如果加入了这个选项,处理速度会稍微提高,但在执行make命令时会进行测试,所以在速度较快的电脑上可能需要花费约5分钟的时间。对于Python 3.7而言,由于测试项目较多,大约需要20分钟的时间,所以非常麻烦。但对于使用速度较快的电脑的Python 3.7版本来说,我认为应该加上这个选项。

make的-j选项是用来指定在编译时使用的核心数量的,设置为-j4将使用4个核心。如果不加上-j选项,只会使用一个核心,从而缩短编译时间。

Ubuntu 18.04 的 Python 3.6 是使用 gcc 8.3 编译的,而 Python 3.8 也可以使用 gcc 8.3 进行编译。如果想要使用 gcc 8.3 进行编译,请安装 build-essential 并添加 gcc-8。

sudo apt install gcc-8

然后,您可以在./configure命令中使用CC选项来指定gcc-8编译器。

./configure --enable-optimizations CC=gcc-8

我已经尝试过了,但处理速度并没有太快。

此外,在执行configure命令时,通过设置–prefix选项可以更改安装路径。例如,如果没有root权限,可以按照以下步骤将其安装到主目录下。在Ubuntu系统中,默认情况下,~/.local/bin在PATH中被设置为通用路径,因此在安装完成后,可以立即在python3.8下使用。

./configure --prefix=$HOME/.local --enable-optimizations
make -s -j2
make altinstall