核心思想
共存的关键在于明确区分 Python 2 和 Python 3 的命令、库和路径,操作系统和 Python 社区已经通过一套约定俗成的规则来实现这一点:

-
命令区分:
- Python 2 的解释器命令是
python2或python2.7。 - Python 3 的解释器命令是
python3或python3.x(python3.8,python3.10)。 python这个命令通常指向系统默认的 Python 版本(在许多现代系统上是 Python 3)。
- Python 2 的解释器命令是
-
库区分:
- Python 2 的包管理器是
pip2或pip2.7,用于安装 Python 2 的库。 - Python 3 的包管理器是
pip3或python3 -m pip,用于安装 Python 3 的库。 - 它们会将包安装到各自独立的
site-packages目录中,互不干扰。
- Python 2 的包管理器是
详细步骤
以下步骤以 Ubuntu/Debian 为例,但同样适用于其他基于 Linux 的发行版。
第 1 步:检查当前系统状态
打开你的终端,查看系统中已经安装的 Python 版本。

# 查看所有 python 可执行文件的位置 which python which python2 which python3 # 查看版本号 python --version python2 --version python3 --version
典型输出示例:
$ which python
/usr/bin/python
$ which python2
/usr/bin/python2
$ which python3
/usr/bin/python3
$ python --version
Python 3.8.10 (系统默认指向 Python 3)
$ python2 --version
Python 2.7.18
$ python3 --version
Python 3.8.10
如果你的系统上只有 python3 和 python2 命令,而没有 python 命令,或者 python 指向 python2,你可能需要设置一下默认的 python 命令。
第 2 步:设置默认的 python 命令(可选但推荐)
很多现代项目使用 python 这个命令来调用解释器,为了让它们能正确运行,最好将 python 指向你更常用的版本(通常是 Python 3)。
使用 update-alternatives 工具可以安全地管理多个版本的命令链接。

# 检查 python 是否在 update-alternatives 的管理列表中 sudo update-alternatives --list python
如果提示 update-alternatives: error: no alternatives for python,说明你需要先添加它。
将 python 指向 Python 3 (推荐):
# 将 python3 添加到 alternatives 列表中,优先级设为 1 sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 1 # 将 python2 添加到 alternatives 列表中,优先级设为 2 (数字越小,优先级越高) sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 2
你可以切换默认的 Python 版本了。
# 切换默认的 python 版本 sudo update-alternatives --config python
系统会列出可选项,让你选择一个作为默认的 python 命令,选择你想要的即可。
如何恢复?
如果你想恢复系统默认状态(python 指向 python3),可以删除这些链接:
sudo update-alternatives --remove python /usr/bin/python3 sudo update-alternatives --remove python /usr/bin/python2
之后 python 命令通常会恢复到指向 python3。
第 3 步:管理 Python 包(pip)
这是共存中最重要的一步,必须确保为正确的 Python 版本安装对应的包。
安装 pip
如果你的系统没有 pip2 或 pip3,可以使用以下命令安装:
# 为 Python 3 安装 pip sudo apt update sudo apt install python3-pip # 为 Python 2 安装 pip (如果需要) sudo apt install python2-pip
使用正确的 pip
-
为 Python 3 安装库:
# 推荐方式,明确指定 pip3 install <package_name> # 或者 python3 -m pip install <package_name>
-
为 Python 2 安装库:
# 推荐方式,明确指定 pip2 install <package_name> # 或者 python2 -m pip install <package_name>
示例:
假设你想安装 requests 库,但只想让它对 Python 3 可用。
# 错误示范 (可能会污染环境或报错) pip install requests # 正确示范 pip3 install requests
安装完成后,你可以验证包是否安装在了正确的位置:
# 查看 Python 3 的 site-packages 路径 python3 -c "import site; print(site.getsitepackages())" # 查看 Python 2 的 site-packages 路径 python2 -c "import site; print(site.getsitepackages())"
你会看到 requests 只出现在 Python 3 的 site-packages 目录中。
第 4 步:为虚拟环境创建 venv
虚拟环境是项目依赖管理的最佳实践,它能完美解决共存问题,每个项目可以有自己独立的 Python 环境。
Python 3 的虚拟环境 (推荐)
Python 3 自带了 venv 模块。
# 创建一个名为 my-project-3 的虚拟环境,使用 Python 3 python3 -m venv my-project-3 # 激活虚拟环境 source my-project-3/bin/activate # 激活后,你的命令行提示符会改变 # (my-project-3) $ # 在这个环境中,python 和 pip 都指向 Python 3 python --version pip install django # 退出虚拟环境 deactivate
Python 2 的虚拟环境
Python 2 没有内置 venv,但可以使用第三方库 virtualenv。
# 首先安装 virtualenv (为 Python 2 安装) pip2 install virtualenv # 创建一个名为 my-project-2 的虚拟环境,使用 Python 2 virtualenv -p python2 my-project-2 # 激活虚拟环境 source my-project-2/bin/activate # 激活后,你的命令行提示符会改变 # (my-project-2) $ # 在这个环境中,python 和 pip 都指向 Python 2 python --version pip install flask # 退出虚拟环境 deactivate
通过这种方式,你可以为不同的项目创建完全隔离的 Python 环境,而无需关心系统级的 Python 版本。
总结与最佳实践
| 任务 | Python 2 命令 | Python 3 命令 | 说明 |
|---|---|---|---|
| 运行脚本 | python2 my_script.py |
python3 my_script.py |
明确指定版本,避免混淆。 |
| 安装库 | pip2 install <package> |
pip3 install <package> |
为正确的版本安装依赖。 |
| 虚拟环境 | virtualenv -p python2 my_env |
python3 -m venv my_env |
为项目创建隔离环境,强烈推荐。 |
| 默认命令 | (通常不建议设为默认) | sudo update-alternatives --config python |
根据需要设置 python 的默认指向。 |
核心原则:
- 显式优于隐式:永远使用
python2/python3和pip2/pip3,不要依赖模糊的python和pip。 - 虚拟环境是王道:对于任何项目,都应在虚拟环境中进行开发,这能彻底避免版本冲突。
pip和python版本必须匹配:pip2只能为 Python 2 安装包,pip3只能为 Python 3 安装包。
遵循以上方法,你就可以在同一个系统上轻松、安全地使用 Python 2 和 Python 3 了。
