🔧 Linux 编译安装指定版本 Python

在内网隔离环境或需要安装特定 Python 版本时,通过源码编译安装是最可靠的方案。本文将详细介绍如何在 Linux 系统中编译安装 Python,并实现与系统 Python 的版本隔离,避免影响系统依赖。

准备工作

在开始编译安装之前,请确认以下条件:

  • 具有 root 或 sudo 权限
  • 准备足够的磁盘空间(至少 500MB)
  • 了解目标 Python 版本号
  • 确认系统为 Debian/Ubuntu 或其他 Linux 发行版

第一步:下载 Python 源码

访问 Python 官方 FTP 服务器下载所需版本的源码包。本文以 Python 3.13.9 为例。

1
2
3
4
5
# 进入源码存放目录
cd /usr/src/

# 下载 Python 源码包
wget https://www.python.org/ftp/python/3.13.9/Python-3.13.9.tar.xz

下载完成后解压源码包:

1
2
# 解压到当前目录
sudo tar -xf Python-3.13.9.tar.xz

第二步:安装编译依赖

🐧 Debian/Ubuntu 系统

在编译 Python 之前,需要安装必要的开发工具和依赖库:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 更新软件包索引
sudo apt update

# 安装编译依赖
sudo apt install -y \
build-essential \
libssl-dev \
zlib1g-dev \
libffi-dev \
libbz2-dev \
libreadline-dev \
libsqlite3-dev \
liblzma-dev \
uuid-dev \
tk-dev \
libncurses5-dev \
libncursesw5-dev \
libgdbm-dev \
libnss3-dev

依赖说明

  • build-essential:包含 gcc、make 等基础编译工具
  • libssl-dev:SSL/TLS 支持,pip 安装包时必需
  • zlib1g-dev:压缩库支持
  • libffi-dev:外部函数接口库
  • libreadline-dev:交互式命令行支持

第三步:配置编译选项

进入解压后的源码目录并配置编译参数:

1
2
3
4
5
# 进入源码目录
cd /usr/src/Python-3.13.9

# 配置编译选项
sudo ./configure --enable-optimizations --prefix=/usr/local/python313

关键参数说明

  • --enable-optimizations:启用 PGO(Profile-Guided Optimization)和 LTO(Link-Time Optimization)优化,提升运行性能约 10-20%,但会增加编译时间
  • --prefix=/usr/local/python313:指定安装路径,避免覆盖系统默认 Python

⚠️ 重要提示:切勿将 Python 安装到 /usr/bin 或覆盖系统 Python,这会导致系统工具(如 apt、yum)无法正常工作。

第四步:编译和安装

编译源码

使用多核并行编译加快速度:

1
2
# 使用所有 CPU 核心进行编译
sudo make -j$(nproc)

编译过程可能需要 5-15 分钟,具体时间取决于 CPU 性能和是否启用优化。

安装 Python

使用 altinstall 而非 install,避免覆盖系统默认版本:

1
2
# 安装到指定目录
sudo make altinstall

💡 提示altinstall 会保留版本号(如 python3.13),而 install 会创建 python3 软链接,可能覆盖系统版本。

第五步:验证安装

检查安装结果

1
2
3
4
5
6
7
8
# 进入安装目录
cd /usr/local/python313/bin

# 查看 Python 版本
./python3.13 --version

# 查看 pip 版本
./pip3.13 --version

预期输出:

1
2
Python 3.13.9
pip 24.x from /usr/local/python313/lib/python3.13/site-packages/pip (python 3.13)

配置环境变量

为了在任意位置使用新安装的 Python,需要将其添加到 PATH 环境变量:

1
2
3
4
# 编辑 shell 配置文件(根据使用的 shell 选择)
nano ~/.zshrc # 使用 zsh
# 或
nano ~/.bashrc # 使用 bash

在文件末尾添加以下内容:

1
2
# Python 3.13 环境变量
export PATH="/usr/local/python313/bin:$PATH"

保存后重新加载配置:

1
2
# 使配置生效
source ~/.zshrc # 或 source ~/.bashrc

最终验证

1
2
3
4
5
6
7
# 验证版本
python3.13 --version
pip3.13 --version

# 验证路径
which python3.13
which pip3.13

预期输出路径为 /usr/local/python313/bin/python3.13

常见问题

问题 1:编译时提示缺少某个库
解决方案:根据错误提示安装对应的 -dev 包,例如 sudo apt install libxxx-dev

问题 2:pip 安装包时 SSL 错误
解决方案:确保编译前已安装 libssl-dev,如未安装需重新编译 Python

问题 3:系统 Python 被覆盖
解决方案:使用 make altinstall 而非 make install,并指定独立的 --prefix 路径

问题 4:编译时间过长
解决方案:可以去掉 --enable-optimizations 参数,牺牲部分性能换取更快的编译速度

扩展知识

多版本管理

通过编译安装可以在同一系统中维护多个 Python 版本,只需为每个版本指定不同的 --prefix 路径即可:

1
2
3
4
5
6
7
8
# Python 3.11
./configure --prefix=/usr/local/python311

# Python 3.12
./configure --prefix=/usr/local/python312

# Python 3.13
./configure --prefix=/usr/local/python313

虚拟环境创建

安装完成后,建议使用虚拟环境隔离项目依赖:

1
2
3
4
5
# 创建虚拟环境
python3.13 -m venv myproject_env

# 激活虚拟环境
source myproject_env/bin/activate

卸载方法

如需卸载编译安装的 Python,直接删除安装目录即可:

1
sudo rm -rf /usr/local/python313

然后从 shell 配置文件中移除对应的 PATH 配置。