2022年10月3日更新

在Ubuntu22.04系统上源码编译python,所依赖环境的安装命令为:

sudo apt install gcc g++ libffi-dev build-essential checkinstall
sudo apt install libreadline-dev readline-common libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev

如果编译后的python并没有放在系统路径下面而是放在了个人目录下,那么还需要配置.bashrc文件来为新编译的python环境指定执行路径和库路径,具体为在.bashrc文件中添加内容:

export PATH="/home/devil/python3.7/bin:$PATH"

export LD_LIBRARY_PATH="/home/devil/python3.7/lib:$LD_LIBRARY_PATH"

其中,/home/devil/python3.7为个人放置编译好python的路径。

========================================

由于需求要求需要使用源码编译Python3.10,快十个年头没有编译过Python源码了,这些年一直用conda来创建Python的环境,但是现在有个需要和Python联合编译的代码来搞,于是就开始弄了下Python3.10的源码编译。

本文操作系统环境为Ubuntu20.04, 系统为干净的新装机系统,因此本文的教程可以适配于大部分情况下的Ubuntu20.04系统。

具体操作如下:

git clone https://github.com/python/cpython

cd cpython

git checkout 3.10

sudo apt install gcc

sudo apt install make

sudo apt install openssl

sudo apt install libssl-dev

sudo apt install libffi-dev

sudo apt install zlib1g-dev

sudo apt install build-essential

sudo apt install gcc g++ libffi-dev build-essential checkinstall

sudo apt install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev

./configure --with-pydebug --enable-shared --prefix=/home/devil/python3.10  && make -j8

make install
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.

大致解释下上面的操作:

下载源码:

git clone https://github.com/python/cpython

在源码中切换到3.10版本下面:

git checkout 3.10

安装依赖组件:

sudo apt install gcc
sudo apt install make
sudo apt install openssl
sudo apt install libssl-dev
sudo apt install libffi-dev
sudo apt install zlib1g-dev
sudo apt install build-essential

sudo apt install gcc g++ libffi-dev build-essential checkinstall

sudo apt install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev

配置及编译:

./configure --with-pydebug --enable-shared --prefix=/home/devil/python3.10  && make -j8

需要注意的是,--prefix=/home/devil/python3.10是指编译好后安装到哪个位置,/home/devil/python3.10是我的电脑上的位置,这个路径可以根据个人需要来修改。

安装:

make install

===================================================

编译&安装后:

ubuntu20.04/22.04 系统环境下源码编译Python3.10_Python

为了让新安装的Python方便使用我们可以修改  .bashrc  文件,将新安装的Python的路径加入到PATH变量中:

在   /home/devil/.bashrc 文件中添加内容:

export PATH=/home/devil/python3.10/bin:$PATH

ubuntu20.04/22.04 系统环境下源码编译Python3.10_python_02

同时在编译安装后的python3.10/bin路径下设置软链接:

ln -s python3.10 python

ln -s pip3 pip

ubuntu20.04/22.04 系统环境下源码编译Python3.10_g++_03

ubuntu20.04/22.04 系统环境下源码编译Python3.10_g++_04

可以看到这样修改后我们默认调用Python的时候就是我们所新编译的,而且这里不建议把编译后的Python安装到系统默认路径下,这样就不需要修改系统中shell的依赖关系,而且我们一般编译Python都是为特定环境开发使用的,这样需要什么版本的Python也可以方便更换。

===================================================

说明一下,如果编译前不执行下面语句:

sudo apt install gcc g++ libffi-dev build-essential checkinstall
sudo apt install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev

编译安装后的Python没有tab补全功能。

===================================================