【Linux】系统升级后python虚拟环境失效
问题
今天心血来潮,将机器的ubuntu22.04升级到了ubuntu24.04,部分插件不能用了不说,最要紧的是之前项目的python虚拟环境都失效了,都是提示解释器无效
问题分析
通过查看虚拟环境中的python,可以发现其中三个可执行程序python,python3,python3.10。

可以发现后两个可执行程序都是软连接到python,而他又是指向/usr/bin/python3.10
但是通过查找python3.10,发现系统已经没有了。
怀疑是当初升级的时候,选择了清除过期的软件包导致的。
问题解决
0. 添加PPA
通过包管理器添加PPA,之后apt直接安装即可!后续步骤不需要再看了!
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
执行完毕后,可以直接通过apt下载所需要的版本
sudo apt install python3.X python3.X-distutils python3.X-dev
终端执行python3.X即可切换到所需要的版本
对于其中的X,可以发现实际上每个ubuntu版本都缺少一个python,这是因为系统版本有一个内置的恰好为所确实的那个python3.X。
- Ubuntu 20.04 (focal) Python3.5 - Python3.7, Python3.9 - Python3.13
- Ubuntu 22.04 (jammy) Python3.7 - Python3.9, Python3.11 - Python3.13
- Ubuntu 24.04 (noble) Python3.7 - Python3.11, Python3.13
1. 下载python3.10
去python官方下载python3.10.15
2. 安装python3.10
通过查看源码包中的readme.rst文件,找到安装步骤:

直接按照上述规则进行安装会导致缺少ssl支持,无法使用pip安装以及依赖ssl运行的库例如urllib、requests等
会导致比如以下的错误
no module named _ssl

因此在配置的时候要加上--with-ssl参数
./configure --with-ssl
按照上述步骤进行安装
3. 设置python3.10 软连接
安装完成后,再终端输入
$ python3.10
Python 3.10.15 (main, Nov 4 2024, 15:12:54) [GCC 13.2.0] on linux
表明已经成功安装,但是发现虚拟环境中的python仍然存在问题。此时查看python3.10的安装位置,发现其只在/usr/local/bin/python3.10,而之前虚拟环境软连接的解释器位置在/usr/bin/python3.10。
此时不需要将所有虚拟环境中的软连接位置进行修改,由于压根不存在/usr/bin/python3.10,我们只需要将其软连接至/usr/local/bin/python3.10即可。
$ sudo ln -s /usr/local/bin/python3.10 /usr/bin/python3.10
至此,虚拟环境恢复正常,且此时已经安装了多个版本
4. 恢复默认python3 软连接
在安装python3.10的文档中,我们发现了This will install Python as python3.
但是实际上系统默认的python3是python3.12。
为了防止出现不必要的问题,还是将原本的python3命令进行恢复。
首先查看了python3位置,发现/usr/bin/python3,/usr/local/bin/python3。
分别对其进行ls - l 发现前者没有被修改,后者软连接至3.10版本了。
那么我们就只对于后边的进行复原,恢复至3.12的版本
jomheo@Jomheo:~$ sudo rm /usr/local/bin/python3
jomheo@Jomheo:~$ sudo ln -s /usr/bin/python3.12 /usr/local/bin/python3
需要首先删除掉原有的软连接,不然就会报错
jomheo@Jomheo:~$ sudo ln -s /usr/bin/python3.12 /usr/local/bin/python3
ln: 无法创建符号链接 '/usr/local/bin/python3': 文件已存在
5. 后记
在某天,我需要暂时使用一下jupyter的时候报错了

后来查询资料发现是需要首先
sudo apt install libffi-dev
之后再重新编译安装上述过程

浙公网安备 33010602011771号