为什么选择从源码安装 Python?
- 安装特定版本:Ubuntu 的官方软件源中可能没有你需要的最新 Python 版本(3.12),或者你需要一个较旧的稳定版本(3.8)。
- 开启/关闭特定功能:可以手动开启或禁用 Python 在编译时的一些可选功能(如
--enable-optimizations优化性能,或--without-pip不安装 pip)。 - 深度定制:开发者可能需要修改 Python 源码进行调试或二次开发。
- 学习目的:了解 Python 的编译和安装过程。
详细安装步骤
我们将以安装 Python 3.12.0 为例,这个过程适用于其他版本,只需替换相应的版本号即可。

第 0 步:准备工作(非常重要!)
在开始之前,必须安装编译 Python 所需的所有依赖包,如果缺少它们,./configure 步骤会失败。
打开终端,执行以下命令:
# 更新软件包列表 sudo apt update # 安装编译所需的工具和库 sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev libsqlite3-dev libbz2-dev
命令解释:
build-essential:包含了gcc,make,autoconf等基础编译工具。zlib1g-dev,libncurses5-dev, :这些都是 Python 源码中某些模块(如zlib,sqlite,readline)在编译时所需要的开发头文件和库。
第 1 步:下载 Python 源码
从 Python 官方网站下载源码压缩包,我们使用 wget 命令下载。

# 创建一个用于存放源码的目录 mkdir ~/python_src cd ~/python_src # 下载 Python 3.12.0 的源码(请访问 https://www.python.org/downloads/ 获取最新链接) wget https://www.python.org/ftp/python/3.12.0/Python-3.12.0.tgz # 如果下载了 .tar.xz 格式,使用以下命令解压 # tar -xf Python-3.12.0.tar.xz # 解压 .tgz 文件 tar -xzf Python-3.12.0.tgz # 进入解压后的目录 cd Python-3.12.0
第 2 步:配置编译选项
这是最关键的一步。configure 脚本会检查你的系统环境,并根据你指定的选项生成 Makefile。
最推荐的做法是将 Python 安装到用户目录,~/python3.12,这样可以避免覆盖系统自带的 Python(通常是 Python 3.x),也无需 sudo 权限。
# 定义一个安装路径变量,方便后续使用 INSTALL_PATH=~/python3.12 # 执行 configure 脚本 # --prefix 指定安装路径 # --enable-optimizations 可以优化 Python 的性能,但会显著增加编译时间 ./configure --prefix=$INSTALL_PATH --enable-optimizations
常用配置选项:
--prefix=<path>:指定安装路径。强烈建议使用非系统路径,如~/opt/python3.12或/usr/local/python3.12。--enable-optimizations:开启 PGO (Profile-Guided Optimization),生成性能更好的 Python 解释器,编译时间会变长(可能需要 2-3 倍),但推荐使用。--with-ensurepip=install:确保安装pip(默认行为)。--enable-shared:编译成共享库(.so文件),某些需要链接 Python 的 C 扩展可能需要这个选项。
如果配置成功,你会看到很多 checking ... for ... 的输出,最后显示 Thank you for using Python。

第 3 步:编译源码
使用 make 命令来编译源码,如果你的电脑有多个 CPU 核心,可以使用 -j 选项来加速编译。
# 使用所有可用的 CPU核心进行编译 # nproc 命令可以获取 CPU 核心数 make -j$(nproc)
这个过程可能会持续很长时间,从几分钟到半小时不等,具体取决于你的电脑性能。
第 4 步:安装编译好的 Python
编译完成后,执行 make install 将文件安装到你在 configure 阶段指定的目录中。
# 无需 sudo,因为我们安装在用户目录下 make install
安装完成后,你会在 ~/python3.12/bin 目录下找到 python3.12 和 pip3.12 等可执行文件。
第 5 步:配置环境变量
为了让系统能够直接使用新安装的 Python,你需要将它的 bin 目录添加到系统的 PATH 环境变量中。
临时生效(仅当前终端会话)
# 将这行添加到 ~/.bashrc 或 ~/.zshrc 文件中,使其永久生效 export PATH="$HOME/python3.12/bin:$PATH" # 使环境变量立即生效 source ~/.bashrc # 如果使用 bash # 或者 source ~/.zshrc # 如果使用 zsh
永久生效(推荐)
-
打开你的 shell 配置文件。
- 对于 Bash:
nano ~/.bashrc - 对于 Zsh:
nano ~/.zshrc
- 对于 Bash:
-
在文件末尾添加以下行:
export PATH="$HOME/python3.12/bin:$PATH"
注意:请将
$HOME/python3.12替换为你自己的实际安装路径。 -
保存并关闭文件(在
nano中是Ctrl+X, 然后按Y, 再按Enter)。 -
执行
source命令让配置立即生效。
第 6 步:验证安装
打开一个新的终端窗口,验证新安装的 Python 是否生效。
# 检查 python 版本 python3.12 --version # 应该输出: Python 3.12.0 # 检查 pip 版本 pip3.12 --version # 应该输出类似: pip 23.2.1 from .../python3.12/lib/python3.12/site-packages/pip (python 3.12) # 你也可以检查默认的 Python 版本 python --version # 如果你的系统 Python 3 是默认的,它可能仍然指向旧版本
重要提示:为了避免与系统自带的 Python 冲突,我们始终推荐使用版本号后缀来调用新安装的 Python(如 python3.12, pip3.12)。
常见问题与解决方案
Q1: 如何管理多个 Python 版本?
当系统中存在多个 Python 版本时,使用 python3.10, python3.11, python3.12 这种方式已经足够清晰,但如果项目非常多,手动管理会很麻烦。
这时,强烈推荐使用 pyenv。pyenv 是一个优秀的 Python 版本管理工具,它可以让你轻松地在不同项目间切换 Python 版本,而不会影响系统环境。
安装 pyenv:
curl https://pyenv.run | bash
然后按照它的提示将初始化命令添加到你的 shell 配置文件中(如 ~/.bashrc)。
使用 pyenv 安装 Python:
# 安装 Python 3.12 pyenv install 3.12.0 # 为当前目录设置 Python 版本 pyenv local 3.12.0 # 全局设置 Python 版本 pyenv global 3.12.0 # 查看已安装的版本 pyenv versions
使用 pyenv 后,你甚至可以不用手动从源码编译,它内部也会调用 ./configure && make 等流程。
Q2: 编译时出现 ModuleNotFoundError: No module named '_ctypes' 错误
这通常是因为缺少 libffi-dev 依赖包,回到第 0 步,确保你已经安装了它:
sudo apt install libffi-dev
然后清理之前的编译文件,重新开始:
make clean ./configure ... make make install
Q3: pip 速度慢,如何换源?
国内用户使用 pip 安装包时,默认从 PyPI 下载会很慢,可以配置使用国内镜像源。
临时使用:
pip3.12 install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package
设为默认:
创建或编辑 ~/.pip/pip.conf 文件(如果目录不存在,请先创建):
[global] index-url = https://pypi.tuna.tsinghua.edu.cn/simple trusted-host = pypi.tuna.tsinghua.edu.cn
这样之后,所有 pip 命令都会默认从这个镜像源下载。
从源码安装 Python 在 Ubuntu 上是一个清晰且可控的过程,关键在于:
- 安装所有编译依赖:这是成功的第一步。
- 使用
--prefix指定非系统安装路径:避免破坏系统环境。 - 配置
PATH环境变量:方便在命令行中使用新版本。 - 使用
pyenv管理多版本:对于需要频繁切换 Python 版本的开发者来说是必备神器。
希望这份详细的指南能帮助你成功安装所需的 Python 版本!
