Ubuntu 更新已安装 Python 的安全做法
一 前置检查与原则
- 查看当前版本:运行 python3 --version 或 python --version,确认现有版本与路径(which python3)。
- 原则:不要覆盖或替换系统自带的 /usr/bin/python3,以免影响 APT、GNOME 等系统组件。推荐做法是“安装新版本到并行路径”,再用 update-alternatives 切换,或用 pyenv 做版本管理。
- 建议优先使用 venv 或 conda 为项目创建隔离环境,避免全局升级带来的兼容性问题。
二 方法一 使用 APT 升级或安装特定版本
- 适用于:希望用官方仓库或 deadsnakes PPA 安装/升级到较新的 Python 3.x。
- 步骤:
- 更新索引:sudo apt update
- 升级现有 python3:sudo apt upgrade python3
- 安装特定版本(示例为 3.12):sudo apt install python3.12
- 如需在命令行使用 python3 指向新版本,用 alternatives 切换(见下一节)
- 验证:python3 --version
- 说明:不同 Ubuntu 版本的官方仓库版本上限不同;若仓库无所需版本,可添加 ppa:deadsnakes/ppa 后再安装。
三 方法二 使用 update-alternatives 切换默认 python3
- 作用:在 /usr/bin/python3 上维护多个候选版本,安全切换系统默认解释器。
- 步骤:
- 注册候选版本(示例将 3.10 与 3.12 加入备选):
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10 1
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.12 2
- 交互选择默认版本:sudo update-alternatives --config python3
- 验证:python3 --version
- 提示:仅对 python3 做切换;避免创建 /usr/bin/python 的系统级链接,以免破坏系统脚本。
四 方法三 使用 pyenv 管理多版本(推荐给开发者)
- 适用:需要在同一台机器上并行安装和切换多个 Python 版本,且不影响系统。
- 步骤:
- 安装依赖: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 python-openssl git
- 安装 pyenv:curl https://pyenv.run | bash
- 配置环境(写入 ~/.bashrc 或 ~/.zshrc):
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 3.12.0
pyenv global 3.12.0 # 或 pyenv local 3.12.0(项目目录生效)
- 验证:python --version(此时由 pyenv 接管)
- 说明:pyenv 安装在用户目录,隔离且可随时切换/回退版本。
五 方法四 源码编译安装(需要自定义构建时)
- 适用:需要特定编译参数、优化或最新补丁版本。
- 步骤:
- 下载源码:wget https://www.python.org/ftp/python/3.12.0/Python-3.12.0.tgz
- 解压与编译:
tar -xvf Python-3.12.0.tgz && cd Python-3.12.0
./configure --enable-optimizations
make -j$(nproc)
- 安装:sudo make altinstall(使用 altinstall 避免覆盖系统 python3)
- 验证:python3.12 --version
- 建议:安装完成后,结合 update-alternatives 或 pyenv 进行版本切换与管理。