关于Linux系统中Python核心包的重要性和恢复误卸载软件的方法

(首发地址:学习日记 https://www.learndiary.com/2024/04/dont-remove-system-python/

大家好,我是来自淘宝网“学习日记小店”的 learndiary,专注于提供 Linux 相关的技术服务。昨日,一位使用 Ubuntu 20.04 的客户遇到了由于 Python 版本问题引发的系统故障。他在处理 Conda 环境中 Python 版本冲突时错误地认为问题与系统自带的 Python 有关,进而尝试卸载系统级别的 Python。然而,在卸载过程中,尽管他卸载中途中断了操作,仍然导致系统在重启后无法登录图形桌面。本文基于“通义千问”归纳视频字幕生成文本修改。视频演示:【Linux 下终端自动退出案例分析】 https://www.bilibili.com/video/BV1wJ4m1L7ZC/

这种情况并非罕见,事实上,我之前也遇到过几起因卸载系统 Python 而引起的诸多问题。在这里,我要特别提醒Linux初学者们:Linux 系统自带的 Python 千万不要卸载,因为它扮演着极其关键的角色,作为众多系统软件和服务的核心依赖包。

这位客户在卸载系统 Python 时,连带着移除了数百个依赖 Python 运行的软件包,其中包括 Nvidia 驱动、ROS(Robot Operating System)软件以及部分图形桌面组件。面对这种状况,解决办法相对直接但也需要细心操作——重新安装所有因误操作而被卸载的软件包,以及恢复系统默认的 Python 版本。

为了精准还原卸载的软件列表,我们需要查看系统安装软件包的日志,从中提取出纯净的软件包名。日志文件中可能会包含括号、逗号等特殊字符,因此,我们可以使用sed命令来清理这些额外内容。例如,把包管理日志文件 /var/log/apt/history.log 中需要的软件包列表复制到文件 history_part.log 中,通过执行命令 cat history_part.log | sed 's/\ ([^)]+)//g;s/,//g' ,可以从历史日志中提取出不含括号和逗号的干净软件包列表。

之后,只需在得到的软件包列表前添加命令 sudo apt install,即可批量重新安装所有被错误卸载的软件包以及系统 Python 本身,从而修复问题。

总结经验教训,不论何时何地,都切勿卸载 Linux 系统中的 Python 核心包。对于不确定是否应当卸载的软件包,在基于Debian的系统如Ubuntu中,可以使用 sudo apt remove [软件包名] -s 命令进行模拟卸载,以便预览该操作可能导致的连锁卸载效果。比如,运行 sudo apt remove python3 -s 将会展示如果不加限制地卸载python3会导致哪些相关软件包一同被卸载。

最后,不同 Linux 系统中依赖 Python 的软件包虽然不尽相同,但基本原则是一致的:保护系统 Python 包不受影响至关重要。希望大家能从这次案例中吸取教训,谨慎对待系统核心组件的管理操作。感谢大家的关注,今天的分享就到这里,期待我们在下一次的学习交流中再见。

发表评论

电子邮件地址不会被公开。 必填项已用*标注