杰瑞科技汇

Python3与Python2如何实现共存?

核心思想

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

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

    • Python 2 的解释器命令是 python2python2.7
    • Python 3 的解释器命令是 python3python3.x (python3.8, python3.10)。
    • python 这个命令通常指向系统默认的 Python 版本(在许多现代系统上是 Python 3)。
  2. 库区分

    • Python 2 的包管理器是 pip2pip2.7,用于安装 Python 2 的库。
    • Python 3 的包管理器是 pip3python3 -m pip,用于安装 Python 3 的库。
    • 它们会将包安装到各自独立的 site-packages 目录中,互不干扰。

详细步骤

以下步骤以 Ubuntu/Debian 为例,但同样适用于其他基于 Linux 的发行版。

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

打开你的终端,查看系统中已经安装的 Python 版本。

Python3与Python2如何实现共存?-图2
(图片来源网络,侵删)
# 查看所有 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

如果你的系统上只有 python3python2 命令,而没有 python 命令,或者 python 指向 python2,你可能需要设置一下默认的 python 命令。

第 2 步:设置默认的 python 命令(可选但推荐)

很多现代项目使用 python 这个命令来调用解释器,为了让它们能正确运行,最好将 python 指向你更常用的版本(通常是 Python 3)。

使用 update-alternatives 工具可以安全地管理多个版本的命令链接。

Python3与Python2如何实现共存?-图3
(图片来源网络,侵删)
# 检查 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

如果你的系统没有 pip2pip3,可以使用以下命令安装:

# 为 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 的默认指向。

核心原则:

  1. 显式优于隐式:永远使用 python2/python3pip2/pip3,不要依赖模糊的 pythonpip
  2. 虚拟环境是王道:对于任何项目,都应在虚拟环境中进行开发,这能彻底避免版本冲突。
  3. pippython 版本必须匹配pip2 只能为 Python 2 安装包,pip3 只能为 Python 3 安装包。

遵循以上方法,你就可以在同一个系统上轻松、安全地使用 Python 2 和 Python 3 了。

分享:
扫描分享到社交APP
上一篇
下一篇