Ubuntu从20.04升级到22.04后,Python3.9虚拟环境中pip报错ModuleNotFoundError: No module named 'distutils.cmd'的解决求助
Ubuntu从20.04升级到22.04后,Python3.9虚拟环境中pip报错ModuleNotFoundError: No module named 'distutils.cmd'的解决求助
看起来你踩了Ubuntu版本升级后Python环境变动的坑,别慌,咱们一步步来解决:
首先你之前尝试安装python3.8-distutils是找错了版本——你的虚拟环境是基于Python3.9的,对应的distutils包应该是python3.9-distutils,而不是3.8的,这就是为什么你会遇到安装候选包不存在的错误。
试试下面的步骤:
第一步:尝试直接安装对应版本的distutils包
- 先更新一下系统软件源:
sudo apt update - 安装Python3.9对应的distutils包:
sudo apt install python3.9-distutils
如果安装成功,重新激活你的Python3.9虚拟环境,再运行pip应该就能正常工作了。
如果上面的包找不到,那就添加支持多Python版本的PPA源
Ubuntu22.04默认源里可能没有Python3.9的相关包,这时候我们可以添加deadsnakes这个专门提供各种Python版本的PPA:
- 添加PPA源:
sudo add-apt-repository ppa:deadsnakes/ppa - 再次更新源:
sudo apt update - 安装python3.9-distutils:
sudo apt install python3.9-distutils
万一还是不行?那就重建虚拟环境
有时候系统升级后,旧的虚拟环境会因为底层Python依赖变动而损坏,这时候重建虚拟环境是最稳妥的办法:
- 先备份当前虚拟环境的依赖(如果还能激活的话):
- 激活虚拟环境:
source /path/to/your/venv/bin/activate - 导出依赖列表:
pip freeze > requirements.txt
- 激活虚拟环境:
- 删除旧的虚拟环境:
rm -rf /path/to/your/venv - 用Python3.9重新创建虚拟环境:
python3.9 -m venv /path/to/new/venv - 激活新环境并安装依赖:
source /path/to/new/venv/bin/activate pip install -r requirements.txt
备注:内容来源于stack exchange,提问作者Angelo Mascaro




