马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
Ubuntu 自带 Python 版本偏低,但不少新框架已经要求 3.11 以上,于是就有了「升级系统 Python」这个常规动作。注意这跟用 pyenv/conda 建独立环境是两码事:本文讲的是把系统的 python3 指向更高版本。这件事有个前提必须说清——系统里很多工具(apt、command-not-found)是绑着自带 Python 的,直接换会连累它们,所以改完必须补修复。
一、准备:先更新索引并装必备工具
sudo apt update
sudo apt install software-properties-common
software-properties-common 提供 add-apt-repository 命令,后面加第三方 PPA 要用到。
二、添加 deadsnakes PPA 并装新版
Ubuntu 官方源里通常只有当前版本自带的 Python 分支,要装 3.12 这种较新的版本,需要借 deadsnakes 这个 PPA:
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo apt install python3.12
装完先确认一下:
python3.12 --version
三、切换默认 python3 指向
两种做法,推荐后者:
做法一,手工换软链(简单直接,但不好回退):
sudo rm /usr/bin/python3
ln -s /usr/bin/python3.12 /usr/bin/python3
做法二,用 update-alternatives 注册(可随时切回):
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.12 1
sudo update-alternatives --config python3
做法一的坑在于 rm 掉系统软链属于不可逆操作,改错了只能靠重装对应包修回来。所以删除之前建议先记下原指向:
ls -l /usr/bin/python3
四、补上 pip
换完 python3 之后 pip 往往一并失效,需要重装:
wget https://bootstrap.pypa.io/get-pip.py --no-check-certificate
sudo python3 get-pip.py
验证:
python3 -m pip --version
如果需要对 pip 降版本(某些老项目对 pip 版本有硬要求):
pip3 install -U 'pip<22' -i https://mirrors.aliyun.com/pypi/simple/
五、venv 要单独装
新版 Python 的 venv 模块不一定跟着一起来了,建虚拟环境前先装:
sudo apt-get install python3.12-venv
装完验证:
python3.12 -m venv /tmp/testenv
source /tmp/testenv/bin/activate
python -V
六、改完之后必然遇到的两个报错
这就是本文开头说的必须修复的部分,换完 python3 大概率会撞上下面两个:
ModuleNotFoundError: No module named 'apt_pkg':系统里 apt 的 Python 模块绑在旧版本上。修法是把系统的 apt_pkg 软链到新版本的 site-packages,路径按实际版本号替换。
ModuleNotFoundError: No module named 'CommandNotFound':输入一个不存在的命令时会报这个,因为 command-not-found 的脚本依赖旧版 Python。修法通常是重装 python3-command-not-found,或者接受这个小瑕疵不影响使用。
遇到这类报错不要慌,本质是「系统工具与系统 Python 强耦合」,把对应工具重装一遍往往就恢复了。
七、更稳妥的做法
如果只是想用新 Python 跑项目,其实完全不必动系统 python3。推荐用 pyenv 或 conda 建独立环境,项目之间互不干扰,也不需要修 apt_pkg 这类连带问题。只有在必须让系统级命令走新版 Python(比如某些只认 /usr/bin/python3 的运维脚本)时,才做本文这套操作。生产机器上改系统 Python 前一定要先做快照。
qidao123.com企服评测-应用市场 编辑提示
|