不要删除系统自带的 Python
很多 Linux 发行版(尤其是 CentOS, RHEL, Fedora)的系统工具和依赖包依赖于系统自带的 Python 版本(通常是 Python 2 或 Python 3)。千万不要尝试删除或升级系统自带的 Python,否则可能导致系统崩溃。

我们的目标是:
- 保留系统自带的 Python。
- 额外安装一个或多个新的 Python 版本(如 Python 3.8, 3.9, 3.10 等)。
- 使用
pyenv等工具来管理和切换这些新安装的 Python 版本,而不会影响系统 Python。
推荐方法:使用 pyenv 进行多版本管理
pyenv 是一个极其强大的 Python 版本管理工具,它允许您在同一台机器上安装多个 Python 版本,并轻松地在它们之间切换,这是 Python 开发者的首选方案。
为什么推荐 pyenv?
- 隔离性:每个 Python 版本都是独立安装的,互不干扰。
- 灵活性:可以安装任何您想要的 Python 版本(包括最新的 3.x 和历史 2.x 版本)。
- 安全性:不会影响系统自带的 Python。
- 便捷性:通过一个简单的命令
pyenv local <version>即可切换项目所用的 Python 版本。
详细安装步骤 (以 Ubuntu/Debian 为例)
以下步骤在 Ubuntu 20.04/22.04 和 Debian 10/11 上经过测试。
第 1 步:安装系统依赖
pyenv 及其编译的 Python 需要一些系统依赖库,打开终端,执行以下命令:

# 更新软件包列表 sudo apt update # 安装编译 Python 所需的依赖 sudo apt install -y make build-essential libssl-dev zlib1g-dev \ libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm \ libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
第 2 步:安装 pyenv
最简单的方式是使用官方的安装脚本。
curl https://pyenv.run | bash
这个脚本会自动完成以下操作:
- 克隆
pyenv仓库到~/.pyenv。 - 将
pyenv的初始化代码添加到您的 Shell 配置文件中(如~/.bashrc,~/.zshrc)。
第 3 步:配置 Shell 环境
为了让当前的终端会话识别 pyenv 命令,您需要重新加载 Shell 配置文件,或者打开一个新的终端窗口。
如果您使用的是 Bash (Ubuntu 默认):
# 重载配置文件 exec "$SHELL"
或者直接打开一个新的终端窗口。
验证 pyenv 是否安装成功:
pyenv --version # 应该输出类似 pyenv 2.3.15 的信息
第 4 步:使用 pyenv 安装 Python 2 和 Python 3
您可以使用 pyenv install 命令来安装任何您想要的 Python 版本。
查找可安装的 Python 版本
# 搜索所有可用的版本 pyenv install --list # 如果想快速找最新的 2.x 和 3.x 版本,可以过滤一下 pyenv install --list | grep " 2\.[0-9]\.[0-9]" pyenv install --list | grep " 3\.[0-9]\.[0-9]"
安装 Python 2.7 (最后一个稳定版)
# 编译和安装需要一些时间,请耐心等待 pyenv install 2.7.18
安装 Python 3 (Python 3.9)
# 同样,安装过程需要一些时间 pyenv install 3.9.18
验证安装
安装完成后,pyenv 会知道这些版本的存在。
pyenv versions # 输出类似: # * system (set by /home/user/.python-version) # 2.7.18 # 3.9.18 # 星号 * 表示当前正在使用的版本
第 5 步:切换和使用 Python 版本
pyenv 提供了三种方式来切换 Python 版本,按推荐顺序排列:
全局设置 (影响整个用户)
# 设置默认的 Python 版本为 Python 3.9 pyenv global 3.9.18 # 验证 python --version # 输出: Python 3.9.18 # 现在再查看版本列表 pyenv versions # 输出: # system # 2.7.18 # * 3.9.18 (set by /home/user/.python-version)
要切换回系统 Python,只需执行 pyenv global system。
目录设置 (针对特定项目,最常用) 进入您的项目目录,为该项目设置一个特定的 Python 版本。
# 创建并进入一个新项目目录 mkdir my_project_py2 cd my_project_py2 # 为当前目录设置 Python 2.7 pyenv local 2.7.18 # 验证 python --version # 输出: Python 2.7.18 # pyenv 会在当前目录下创建一个名为 .python-version 的文件来记录设置 cat .python-version # 输出: 2.7.18
只要您在这个目录或其子目录中打开终端,pyenv 会自动使用 Python 2.7,当您离开这个目录后,会恢复到之前的全局版本。
临时设置 (仅对当前终端会话有效)
# 在任意目录下,临时使用 Python 2.7 pyenv shell 2.7.18 python --version # 输出: Python 2.7.18 # 这个设置只对当前终端窗口有效,关闭后即恢复
针对 CentOS/RHEL/Fedora 用户
步骤基本相同,但安装系统依赖的命令不同。
第 1 步:安装系统依赖
# 安装 EPEL 仓库 (如果尚未安装) sudo yum install -y epel-release # 安装编译依赖 sudo yum groupinstall -y "Development Tools" sudo yum install -y openssl-devel bzip2-devel libffi-devel xz-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-develxz-devel libffi-devel openssl-devel
第 2 步及之后步骤
与 Ubuntu/Debian 的 第 2 步到第 5 步 完全相同。
总结与最终建议
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
pyenv |
强烈推荐,功能强大,隔离性好,不影响系统,易于管理。 | 编译安装耗时,初始配置稍复杂。 | 所有需要管理多个 Python 版本的场景,尤其是开发环境。 |
| 系统包管理器 | 安装最快,简单直接。 | 版本可能很旧,无法自定义,可能破坏系统环境。 | 仅当您只需要系统提供的默认 Python 版本,且版本满足需求时。 |
| 源码编译 | 完全自定义,可以安装任何版本。 | 手动管理麻烦,容易产生冲突,没有版本切换功能。 | 不推荐新手使用,pyenv 已经做得更好了。 |
最终建议:
对于绝大多数用户,请遵循 pyenv 的安装和使用方法,它为您提供了一个干净、灵活且可维护的 Python 环境,是现代 Python 开发的标准实践,一旦配置好,您就可以轻松地在 Python 2 和 Python 3 以及它们的不同子版本之间无缝切换。
