在 Debian 中更新 Python 的推荐做法
一 使用 APT 更新到仓库可用的最新版本
- 适用于希望稳定、可回滚的场景,优先使用系统仓库提供的 python3.x 包。
- 步骤:
- 更新索引并升级已装包
sudo apt update && sudo apt upgrade
- 查看可用的 python3 版本
apt list python3*
- 安装指定次要版本(示例:3.11)
sudo apt install python3.11
- 验证
python3.11 --version
- 说明:Debian 稳定版通常只提供较保守的次要版本;若仓库没有你需要的版本,请看下文的源码编译或 pyenv 方案。
二 从源码编译安装指定版本
- 适用于需要较新或自定义构建选项的版本;不会替换系统默认 python3。
- 步骤:
- 安装构建依赖
sudo apt update
sudo apt install -y build-essential libssl-dev libffi-dev libbz2-dev libreadline-dev libsqlite3-dev zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev liblzma-dev wget
- 下载并解压源码(以 3.12.8 为例)
wget https://www.python.org/ftp/python/3.12.8/Python-3.12.8.tgz
tar xf Python-3.12.8.tgz && cd Python-3.12.8
- 配置与编译(并行编译加速)
./configure --enable-optimizations
make -j “$(nproc)”
- 使用 altinstall 安装,避免覆盖系统默认解释器
sudo make altinstall
- 验证
python3.12 --version
- 提示:如需 pip,可在安装后执行:python3.12 -m ensurepip --upgrade。
三 使用 pyenv 管理多个 Python 版本(推荐给开发者)
- 在同一台机器上并行安装、切换多个版本,隔离系统 Python,安全且灵活。
- 步骤:
- 安装依赖(同“源码编译”的依赖)
- 安装 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 -)”
- 重新加载配置
source ~/.bashrc
- 安装与切换版本
pyenv install 3.12.8
pyenv global 3.12.8 # 全局默认
pyenv local 3.11.9 # 仅当前项目目录
- 验证
python --version
- 说明:pyenv 不影响系统自带 Python,适合开发与测试多版本兼容。
四 设置默认 python3 与多版本切换
- 使用 Debian 的 alternatives 机制切换 /usr/bin/python3 的指向(系统级、可回滚):
- 注册两个版本(示例:3.11 与 3.12)
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.11 1
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.12 2
- 交互选择默认版本
sudo update-alternatives --config python3
- 验证
python3 --version
- 建议:仅在确有需要且充分测试后再更改系统默认解释器,避免影响系统工具链。
五 虚拟环境与依赖管理
- 最佳实践是每个项目使用独立的 venv,避免全局包冲突,并便于迁移:
- 创建虚拟环境(以 3.12 为例)
python3.12 -m venv .venv
- 激活环境
source .venv/bin/activate
- 升级 pip 并安装依赖
pip install -U pip
pip install -r requirements.txt
- 退出环境
deactivate
- 迁移已有项目:
pip freeze > requirements.txt(旧环境)
在新环境 pip install -r requirements.txt 并充分测试。