杰瑞科技汇

Python3与Python2如何实现共存?

最佳实践 (强烈推荐)

这种方法的核心是:不直接使用 python 命令,而是明确使用 python2python3

Python3与Python2如何实现共存?-图1
(图片来源网络,侵删)

步骤 1:检查系统当前状态

查看你的系统已经安装了哪些 Python 版本。

# 查看所有 python 可执行文件的位置
which python
which python2
which python3
# 查看版本号
python --version
python2 --version
python3 --version

常见情况:

  • 在现代 Linux 发行版(如 Ubuntu 20.04+, CentOS 8+)上,python 命令通常指向 python3,而 python2 可能已经不被默认安装。
  • 在一些旧系统或 macOS 上,python 可能默认指向 python2.7

步骤 2:安装 Python 3

如果你的系统没有 Python 3,请安装它,以 Ubuntu 为例:

# 更新软件包列表
sudo apt update
# 安装 python3 及其包管理工具 pip3
sudo apt install python3 python3-pip

以 CentOS/RHEL 为例:

Python3与Python2如何实现共存?-图2
(图片来源网络,侵删)
# 安装 EPEL 仓库(如果需要)
sudo yum install epel-release
# 安装 python3 及其 pip
sudo yum install python3 python3-pip

步骤 3:设置命令别名 (Alias)

这是最关键的一步,让你能方便地在两个版本间切换,在你的 shell 配置文件中添加别名。

  • 对于 Bash (最常见): 编辑 ~/.bashrc 文件
  • 对于 Zsh: 编辑 ~/.zshrc 文件

打开文件:

# 使用 nano 编辑器
nano ~/.bashrc

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

# 为 Python 2 和 Python 3 设置明确的别名
alias python='python2'
alias pip='pip2'
# 如果你希望默认使用 Python 3,可以反过来设置
# alias python='python3'
# alias pip='pip3'
# 强制重新加载配置文件,使别名生效
source ~/.bashrc

重要提示:

Python3与Python2如何实现共存?-图3
(图片来源网络,侵删)
  • 不要轻易覆盖 pythonpip 的默认指向,很多系统工具和脚本依赖于 python 指向 python2,强行改为指向 python3 可能导致系统不稳定。
  • 最佳做法是让 python 指向 python2,因为 python2 是旧版,兼容性要求更高,对于新的项目,你将明确使用 python3

步骤 4:验证安装

打开一个新的终端窗口,或者执行 source ~/.bashrc 后进行验证。

# 检查 python 命令指向
python --version  # 应该显示 Python 2.x
python2 --version # 应该显示 Python 2.x
python3 --version # 应该显示 Python 3.x
# 检查 pip 命令指向
pip --version    # 应该显示 pip 对应 Python 2.x
pip2 --version   # 应该显示 pip 对应 Python 2.x
pip3 --version   # 应该显示 pip 对应 Python 3.x
# 测试安装包
pip install some-package-for-py2  # 会安装到 Python 2 的环境
pip3 install some-package-for-py3 # 会安装到 Python 3 的环境

步骤 5:为项目创建虚拟环境 (强烈推荐)

这是专业开发者的标准做法,可以完全隔离不同项目的依赖,避免版本冲突。

使用 Python 3 的 venv 模块创建虚拟环境:

# 创建一个名为 my_py3_project 的项目文件夹
mkdir my_py3_project
cd my_py3_project
# 使用 python3 创建虚拟环境
python3 -m venv venv
# 激活虚拟环境
source venv/bin/activate
# 激活后,你的命令行提示符前会出现 (venv)
# 在这个环境中,python 和 pip 命令会自动指向 Python 3
(venv) $ python --version
Python 3.x.x
# 安装项目依赖
pip install requests
# 退出虚拟环境
deactivate

使用 virtualenv 工具 (更灵活,可以创建 Python 2 的虚拟环境):

首先安装 virtualenv

# 使用 pip3 安装,避免污染 Python 2 的环境
pip3 install virtualenv

创建并激活 Python 2 的虚拟环境:

mkdir my_py2_project
cd my_py2_project
# 使用 python2 创建虚拟环境
virtualenv -p /usr/bin/python2 venv_py2  # 指定 python2 的路径
# 激活
source venv_py2/bin/activate
# python 和 pip 指向 Python 2
(venv_py2) $ python --version
Python 2.7.x

使用 update-alternatives (高级,适用于 Linux)

这个工具是 Linux 用来管理多个同名可执行文件版本的标准方法,它比 alias 更系统化,但配置稍复杂。

安装 Python 2 和 Python 3

确保两个版本都已安装。

将 Python 注册到 update-alternatives

# 为 python2 注册
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1
# 为 python3 注册
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.8 2
# 注意:/usr/bin/python3.8 请替换成你系统上 python3 的实际路径
  • --install: 安装一个新的替代项。
  • /usr/bin/python: 要管理的命令。
  • /usr/bin/python2.7: 该命令的一个具体实现。
  • 12: 是优先级数字,数字越大,优先级越高,这里让 python3 优先级更高。

切换版本

现在你可以通过一个命令来切换默认的 python 版本。

# 查看可用的选项
sudo update-alternatives --config python
# 系统会列出如下选项:
# There are 2 choices for the alternative python (providing /usr/bin/python).
#    Selection    Path                 Priority   Status
#  ------------------------------------------------------------
#  * 0            /usr/bin/python3.8     2         auto mode
#    1            /usr/bin/python2.7     1         manual mode
#    2            /usr/bin/python3.8     2         manual mode
# Press <enter> to keep the current choice[*], or type selection number:

输入你想要的编号(1),然后按回车,python 命令就会立即切换到 python2.7

恢复自动模式

如果你想恢复系统自动选择(通常是优先级最高的那个版本),可以运行:

sudo update-alternatives --auto python

注意: update-alternatives 修改的是系统级的 /usr/bin/python,可能会影响依赖它的系统脚本,使用时需谨慎。


针对 macOS 的 Homebrew 用户

如果你使用 Homebrew 安装 Python,它会自动处理好共存问题。

  1. 安装 Python 3:

    brew install python

    Homebrew 不会覆盖系统自带的 Python 2,它会将 Python 3 安装在 /usr/local/opt/python/bin/ 等位置。

  2. 使用命令:

    • python 通常指向系统自带的 Python 2。
    • python3 指向 Homebrew 安装的 Python 3。
    • pip 通常指向系统自带的 pip2。
    • pip3 指向 Homebrew 安装的 pip3。

    这与 方法一 的最佳实践完全一致,非常清晰和安全。


总结与建议

方法 优点 缺点 适用场景
命令别名 简单、灵活、安全、不影响系统 需要手动配置别名 绝大多数用户的最佳选择,尤其适合个人开发和需要精确控制环境的场景。
update-alternatives 系统级统一管理,切换方便 可能影响系统稳定性,配置稍复杂 需要在多个用户或服务间统一切换 Python 版本的 Linux 服务器环境。
Homebrew 自动处理,与 macOS 深度集成 仅限 macOS macOS 用户使用 Homebrew 时的标准做法。

最终建议:

对于绝大多数开发者,采用方法一(命令别名 + 虚拟环境) 是最稳健、最不容易出错的方案。

  1. 保持 python 指向 python2python3 指向 Python 3。
  2. 使用 pip2pip3 分别管理对应的包。
  3. 为每个新项目创建独立的 Python 3 虚拟环境 (python3 -m venv),在激活的环境中,python 命令会临时指向 Python 3,实现完美隔离。
分享:
扫描分享到社交APP
上一篇
下一篇