在真实开发/运维环境里,"一台机器上必须同时跑多个 Python 版本"几乎成了标配。下面把常见痛点、主流解决方案、踩坑要点和典型流程一次性梳理清楚,照着抄作业即可。

典型共存场景

  1. 操作系统自带 2.7/3.6,业务代码要求 3.10
  2. 项目 A 依赖 TensorFlow 1.x(仅支持 3.7),项目 B 要用 PyTorch 2.x(需 3.10+)
  3. 打包 RPM/DEB 时,需要把解释器一起打进去,与系统 Python 隔离
  4. CI 要并行跑 3.8/3.9/3.10/3.11 四套测试
  5. 嵌入式/离线环境,源码编译多版本并静态链接 openssl、sqlite

如何管理多版本共存?

通常通过工具实现版本隔离与切换,常见工具包括:

  • pyenv:轻量工具,可安装 / 切换全局 / 局部 Python 版本;
  • conda:适用于数据科学场景,支持创建不同版本的虚拟环境;
  • virtualenv/venv:结合特定版本 Python 创建虚拟环境,隔离项目依赖。

这里我们主要介绍 pyenv的安装和使用

安装 pyenv

linux/mac 安装 pyenv

前置条件

  • 确保你的系统已安装基本开发工具(如 git 和编译工具),否则可能无法编译 Python 版本。
  • 对于 Linux/macOS,建议使用包管理器安装依赖。

安装步骤

  1. 安装依赖
    在开始之前,安装必要的编译工具。不同的操作系统命令如下:

    • Ubuntu/Debian:

      sudo apt update
      sudo apt install -y make build-essential libssl-dev zlib1g-dev \
      libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm \
      libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev
      
    • CentOS/RHEL:

      sudo yum groupinstall "Development Tools"
      sudo yum install zlib-devel bzip2-devel openssl-devel ncurses-devel \
      sqlite-devel readline-devel tk-devel libffi-devel xz-devel
      
    • macOS(使用 Homebrew):

      brew install openssl readline sqlite3 xz zlib tcl-tk
      
  2. 安装 pyenv
    使用官方推荐的安装脚本:

    curl https://pyenv.run | bash
    # 或者自己clone 
    # git clone https://github.com/pyenv/pyenv.git ~/.pyenv
    

    这会将 pyenv 安装到 ~/.pyenv 目录。

  3. 配置环境变量
    安装完成后,将以下内容添加到你的 shell 配置文件(根据你使用的 shell,选择对应的文件:~/.bashrc~/.zshrc~/.bash_profile):

    echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
    echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
    echo -e 'if command -v pyenv &>/dev/null; then\n eval "$(pyenv init --path)"\nfi' >> ~/.bashrc
    

    保存文件后,运行以下命令使配置生效:

    source ~/.bashrc  # 或 ~/.zshrc、~/.bash_profile,根据你的 shell
    # 或者直接重启 shell
    # exec $SHELL
    
  4. 验证安装
    检查 pyenv 是否正确安装:

    pyenv --version
    

    如果输出类似 pyenv 2.x.x,说明安装成功。

Windows 系统安装 pyenv

Windows 上原生的 pyenv 支持有限,推荐使用 pyenv-win(一个专为 Windows 设计的版本)。

安装 pyenv-win

  1. 使用包管理器安装(推荐):

    • 如果有 Scoop:

      scoop install pyenv
      
    • 如果有 Chocolatey:

      choco install pyenv-win
      
  2. 手动安装

    • 从 GitHub 下载 pyenv-win:https://github.com/pyenv-win/pyenv-win
    • 解压到 C:\Users<你的用户名>.pyenv
    • 添加环境变量:
      • PYENV = C:\Users<你的用户名>.pyenv\pyenv-win
      • PYENV_ROOT = C:\Users<你的用户名>.pyenv\pyenv-win
      • PYENV_HOME = C:\Users<你的用户名>.pyenv\pyenv-win
      • 将 %PYENV%\bin 和 %PYENV%\shims 添加到系统 PATH。
  3. 验证

    pyenv --version
    

使用方法

使用 pyenv

常用命令

以下是 pyenv 的基本用法:

  1. 查看可用 Python 版本
    列出所有可安装的 Python 版本:

    pyenv install --list
    

    输出会显示大量版本,例如 3.8.12、3.9.10、3.10.9 等。

  2. 安装特定 Python 版本
    安装你需要的版本,例如 Python 3.10.9:

    pyenv install 3.10.9
    
    • 安装过程会下载并编译源码,可能需要几分钟。
    • 如果需要加速,可以使用镜像(见下方“高级技巧”)。
  3. 设置全局 Python 版本
    将某个版本设为默认:

    pyenv global 3.10.9
    

    检查当前版本:

    python --version
    
  4. 设置项目本地版本
    在特定项目目录中设置 Python 版本:

    cd /path/to/your/project
    pyenv local 3.10.9
    

    这会在当前目录生成一个 .python-version 文件,进入该目录时会自动切换版本。

  5. 查看已安装的版本
    列出本地安装的 Python 版本:

    pyenv versions
    

    输出示例:

      system
    * 3.10.9 (set by /home/user/.pyenv/version)
      3.9.10
    
  6. 卸载 Python 版本
    删除某个版本:

    pyenv uninstall 3.10.9
    

Q.E.D.


寻门而入,破门而出