杰瑞科技汇

python2 python3 共存

核心原则

  1. 明确调用:永远不要依赖 python 命令来运行你的脚本,因为它在不同系统上可能指向不同的版本,在代码中、在命令行里,都使用 python2python3
  2. 使用虚拟环境:这是最重要的一点,为每个项目创建独立的虚拟环境,并在其中指定所需的 Python 版本,这样可以完美避免库版本冲突和系统环境污染。
  3. 包管理器分离:Python 2 和 Python 3 有自己的包管理器,pippip3,它们管理的库是相互独立的,不会冲突。

Linux (以 Ubuntu/Debian 为例)

这是最简单的情况,因为大多数现代 Linux 发行版默认已经这样配置了。

python2 python3 共存-图1
(图片来源网络,侵删)

安装两个版本

如果你的系统没有预装,可以这样安装:

# 更新包列表
sudo apt update
# 安装 Python 3 (默认是最新版,如 3.10, 3.11)
sudo apt install python3 python3-pip
# 安装 Python 2 (通常是 2.7)
sudo apt install python2 python2-pip

验证安装

# 检查版本
python2 --version  # 应该显示 Python 2.x.x
python3 --version  # 应该显示 Python 3.x.x
# 检查 pip 版本
pip2 --version
pip3 --version

python 命令

  • Ubuntu 18.04 及以后版本:默认 python 命令指向 python3,这是推荐的做法。
  • 旧版 Ubuntu (如 16.04):默认 python 命令指向 python2

如果你想让 python 指向 python3(推荐),可以执行以下操作(需要 update-alternatives 工具):

# 检查 python 是否在 alternatives 列表中
sudo update-alternatives --list python
# 如果没有输出,需要手动添加
# 将 python2 和 python3 添加到 alternatives 列表
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 1
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 2
# 然后选择默认版本
sudo update-alternatives --config python
# 在弹出的菜单中选择 python3 的序号(通常是 2)

最佳实践:即使设置了 python -> python3,在编写和分享代码时,也应在 shebang (文件首行的 ) 中明确指定版本。

# 对于 Python 2 脚本
#!/usr/bin/env python2
# 对于 Python 3 脚本
#!/usr/bin/env python3

macOS

macOS 自带 Python 2(通常在 /usr/bin/python),但这个版本是系统自带的,不应被修改或用于包安装,我们需要使用 Homebrew 来安装和管理 Python 3。

python2 python3 共存-图2
(图片来源网络,侵删)

安装 Homebrew

如果还没有安装 Homebrew,打开终端,运行以下命令:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

使用 Homebrew 安装 Python 3

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

# 安装最新的 Python 3
brew install python

安装完成后,Homebrew 会自动创建一些链接:

  • python3 命令可用。
  • pip3 命令可用。
  • python 命令通常指向 python3(通过 /usr/local/bin/python 这样的软链接)。

验证安装

# 检查路径和版本
which python  # 应该指向 /usr/local/bin/python 或 /opt/homebrew/bin/python
python --version # 应该显示 Python 3.x.x
which python2 # 应该指向 /usr/bin/python2 (系统自带)
python2 --version # 应该显示 Python 2.7.x
which pip3  # 应该指向 /usr/local/bin/pip3
pip3 --version

macOS 的特殊情况

  • 系统 Python 2 (/usr/bin/python2):这是系统自带的,绝对不要pip2 在这里安装任何包,否则会破坏系统。
  • Homebrew Python 3 (/usr/local/bin/python3):这是你用来开发的主要 Python 环境,所有的包都应该用 pip3 安装在这里。

Windows

Windows 的情况稍微复杂一些,因为它不使用 shebang,而是通过文件后缀名(.py)关联到解释器。

安装 Python 3

Python 官网 下载并安装最新的 Python 3。在安装界面,务必勾选 "Add Python 3.x to PATH",这是最关键的一步!

安装完成后,你可以直接在命令行使用 pythonpip 命令,它们都默认指向 Python 3。

安装 Python 2

Python 官网 下载并安装 Python 2.7。同样,在安装界面,务必勾选 "Add Python 2.7 to PATH"

安装完成后,你的系统 PATH 环境变量中会包含 Python 2 和 Python 3 的路径,由于 Python 3 的路径通常在 Python 2 之后,python 命令会优先找到 Python 3。

验证和解决冲突

打开新的命令行窗口,验证:

# 检查版本
python --version  # 应该显示 Python 3.x.x
python2 --version # 应该显示 Python 2.7.x
py --list         # py.exe 是 Python 启动器,会列出所有已安装的版本
# 检查 pip 版本
pip --version     # 应该是 Python 3 的 pip
pip2 --version    # 应该是 Python 2 的 pip

问题python 命令指向了 Python 2,说明 PATH 中 Python 2 的路径在 Python 3 的前面,你需要手动调整系统环境变量。

解决 PATH 冲突

  1. 在 Windows 搜索栏中搜索“编辑系统环境变量”并打开它。
  2. 点击“环境变量...”按钮。
  3. 在“系统变量”区域,找到名为 Path 的变量,选中它并点击“编辑”。
  4. 在变量值列表中,找到 Python 2 和 Python 3 的条目(C:\Python27C:\Python39)。
  5. 将 Python 3 的条目移动到 Python 2 的条目上方,然后点击“确定”保存所有设置。
  6. 关闭所有已打开的命令行窗口,重新打开一个新的,再次验证 python --version

最重要的实践:虚拟环境

无论你使用哪个操作系统,虚拟环境都是管理项目依赖的终极解决方案,它可以为每个项目创建一个隔离的 Python 环境。

安装 virtualenv 工具

virtualenv 可以创建与 Python 版本无关的隔离环境。

# 使用 pip3 安装 virtualenv
pip3 install virtualenv

为项目创建和使用虚拟环境

假设你要创建一个需要 Python 2 的旧项目和一个需要 Python 3 的新项目。

项目 A (需要 Python 2)

# 1. 创建项目文件夹
mkdir my_project_py2
cd my_project_py2
# 2. 使用 python2 创建虚拟环境
#    -p /path/to/python2 指定了解释器路径
#    在 Linux/macOS 上,路径通常是 /usr/bin/python2
#    在 Windows 上,路径通常是 C:\Python27\python.exe
virtualenv -p /usr/bin/python2 venv_py2
# 3. 激活虚拟环境
# Linux/macOS
source venv_py2/bin/activate
# Windows
venv_py2\Scripts\activate
# 4. 检查环境中的 Python 版本
# 现在的 (venv_py2) $ python --version  应该显示 Python 2.7.x
# 5. 安装项目依赖 (这个包只会安装在 venv_py2 环境里)
(venv_py2) $ pip install some-old-library
# 6. 退出虚拟环境
(venv_py2) $ deactivate

项目 B (需要 Python 3)

# 1. 创建项目文件夹
mkdir my_project_py3
cd my_project_py3
# 2. 使用 python3 创建虚拟环境 (通常可以省略 -p,因为默认就是系统 python3)
virtualenv -p /usr/bin/python3 venv_py3
# 3. 激活虚拟环境
source venv_py3/bin/activate  # Linux/macOS
# venv_py3\Scripts\activate     # Windows
# 4. 检查环境中的 Python 版本
# (venv_py3) $ python --version  应该显示 Python 3.x.x
# 5. 安装项目依赖
(venv_py3) $ pip install some-new-library
# 6. 退出虚拟环境
(venv_py3) $ deactivate
操作系统 Python 2 命令 Python 3 命令 包管理器 核心建议
Linux python2 python3 pip2, pip3 使用 update-alternativespython 指向 python3,并为每个项目创建 virtualenv
macOS python2 (系统自带,慎用) python3 (Homebrew) pip2 (慎用), pip3 使用 Homebrew 管理 Python 3。永远不要在系统 Python 2 中安装包。virtualenv 是必须的。
Windows python2 python (或 python3) pip2, pip (或 pip3) 安装时务必勾选 "Add to PATH",使用 py -2py -3 是调用特定版本的可靠方式。virtualenv 是必须的。

遵循以上方法,你就可以在任何系统上优雅地实现 Python 2 和 Python 3 的共存,并保持开发环境的整洁和稳定。

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