温馨提示×

Ubuntu中Python多版本如何共存

小樊
36
2025-11-14 21:42:20
栏目: 编程语言

Ubuntu 下 Python 多版本共存的实用方案


方案一 使用 pyenv 管理多版本(推荐)

  • 安装编译依赖
    • 执行:sudo apt update && sudo apt install -y 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 python-openssl git
  • 安装 pyenv
    • 执行:curl https://pyenv.run | bash
    • ~/.bashrc 末尾追加并生效:
      export PYENV_ROOT="$HOME/.pyenv"
      export PATH="$PYENV_ROOT/bin:$PATH"
      eval "$(pyenv init --path)"
      eval "$(pyenv init -)"
      # 可选:集成虚拟环境插件
      eval "$(pyenv virtualenv-init -)"
      
      • 使配置生效:source ~/.bashrc
  • 安装与切换版本
    • 查看可安装版本:pyenv install --list
    • 安装指定版本(示例):pyenv install 3.11.9
    • 设置版本:
      • 全局:pyenv global 3.11.9
      • 当前项目目录:pyenv local 3.10.12
      • 当前 shell:pyenv shell 3.9.18
    • 验证:python -Vwhich pythonpyenv versions
  • 提示
    • 使用 pyenv which python 可查看实际调用的解释器路径。
    • 推荐配合 pyenv virtualenv 为每个项目创建隔离环境,避免包冲突。

方案二 使用 deadsnakes PPA 安装多版本 Python3

  • 添加软件源并安装
    • 执行:sudo add-apt-repository ppa:deadsnakes/ppa
    • 更新索引:sudo apt update
    • 安装所需版本(示例):sudo apt install python3.12 python3.12-venv python3.12-dev
  • 使用
    • 直接调用带版本号的解释器:python3.12 -V
    • 创建虚拟环境:python3.12 -m venv .venv && source .venv/bin/activate
  • 说明
    • 适合不想自行编译的场景;各版本以 python3.x 命令区分,互不干扰。

方案三 使用 update-alternatives 切换系统默认 python

  • 将多个 Python 纳入统一管理
    • 示例:sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.10 2
    • 示例:sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.12 1
  • 交互式选择默认版本
    • 执行:sudo update-alternatives --config python
    • 按提示输入序号选择默认 python
  • 查看与验证
    • 查看列表:sudo update-alternatives --list python
    • 验证:python -V
  • 注意
    • 修改系统级 python 可能影响系统工具链,生产环境谨慎操作;更推荐在用户态用 pyenv 或项目级 venv。

方案四 使用 Docker 隔离不同版本

  • 快速启动不同版本容器
    • Python 3.8:docker run -it --rm python:3.8 bash
    • Python 3.9:docker run -it --rm python:3.9 bash
  • 说明
    • 零侵入主机环境,适合 CI/CD、测试与多版本对比;如需持久化代码与依赖,可挂载卷或编写 Dockerfile。

最佳实践与常见问题

  • 优先为每个项目创建隔离环境
    • venv:python3.x -m venv .venv && source .venv/bin/activate
    • 使用 pyenv 虚拟环境:pyenv virtualenv <version> <name> && pyenv activate <name>
  • 正确安装与调用 pip
    • 避免混用:python3.12 -m pip install <pkg>(明确指向解释器)
    • 若提示找不到 pip,先安装对应版本的 venv 包(如 python3.12-venv),再创建虚拟环境使用 python -m pip
  • 避免替换系统 python
    • 不建议覆盖 /usr/bin/python;使用 python3.x 命令或用户态工具(pyenv)切换版本
  • 多用户或 CI 场景
    • 推荐 pyenv 或 Docker;必要时用 update-alternatives 做系统级默认,但需充分测试
  • 常见故障排查
    • 编译失败:多为缺少依赖,按“方案一”的依赖清单补齐后重试
    • 命令找不到:确认 PATH 与 shell 配置已加载(如 source ~/.bashrc
    • 包安装到错误环境:确认激活了正确的虚拟环境或使用 python -m pip 明确目标解释器

0