尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

树莓派多版本Python共存,如何干净卸载指定版本且不影响系统?

发布时间:2026/9/28 19:34:52

资讯中心
01
ARTICLE

树莓派多版本Python共存,如何干净卸载指定版本且不影响系统?

树莓派多版本Python共存,如何干净卸载指定版本且不影响系统?
刚折腾完树莓派上的Python多版本共存问题踩了一圈坑之后发现真正麻烦的不是安装某个版本的Python而是卸载一个已经被各种依赖“焊死”的指定版本。尤其是在树莓派这种资源紧张的板子上多个Python版本共存会把环境变量、软链接、pip插件、编译缓存搅成一锅粥而卸载那个“多余版本”时稍微手一抖系统自带的Python可能被连带弄坏连apt都用不了。这篇内容就聚焦一个问题如何在树莓派系统里干净地卸载指定版本Python并且不影响其他版本继续正常工作。适合那些装过多个Python版本、想把环境整理干净的人阅读。无论你是为了给YOLO、OpenCV这类视觉项目腾空间还是因为某个Python版本跟摄像头库或GPIO库冲突想回滚这篇文章都能帮你理清思路。1. 先搞清楚这个Python到底能不能卸1.1 区分系统Python与自装Python很多人一上来就执行rm -rf /usr/bin/python3这是最危险的动作。树莓派官方系统Raspberry Pi OS自带Python而且系统底层大量工具都在使用它。apt包管理器、raspi-config配置工具、网络管理模块甚至桌面环境的某些组件都是基于系统自带的Python版本运行的。贸然删掉这个版本轻则提示No module named apt重则直接导致系统无法启动桌面或无法联网。所以动手前第一件事先分辨“系统自带的Python”和“你自己后来装的Python”。系统自带的一般位于/usr/bin/下包管理器记录在dpkg数据库里而自己编译安装或通过其他方式装的多半在/usr/local/bin/或/opt/目录下没有dpkg记录。判断方法很简单在终端输入type -a python3.9 which python3.9 dpkg -S $(which python3.9) 2/dev/null如果dpkg -S能返回一个类似python3.9-minimal: /usr/bin/python3.9的结果说明这个版本是apt装的如果返回dpkg-query: no path found matching pattern那它就是手动编译安装的。这条信息决定了你后面要选哪条卸载路线。有几种常见场景我是强烈建议卸载Python指定版本的源码编译安装了一个新版本却把系统原来默认的Python软链接覆盖了导致系统工具链混乱为了跑某个库比如特定版本的TensorFlow或PyTorch装了一个Python后来项目废弃了版本纯粹占空间树莓派上的多个Python版本之间冲突pip安装的包互相污染你确定只保留某个版本。我个人的习惯是树莓派系统级的Python版本绝不轻易卸载除非我确定系统里没有任何脚本依赖它。换句话说卸载目标应当是“多出来的、可替代的那个版本”而不是最基础的运行环境。1.2 确认安装方式与受影响的范围我们日常在树莓派上安装Python的无非三种方式apt直接安装比如sudo apt install python3.11装完由dpkg管理系统记录卸载时用apt remove就能干净处理源码编译安装自己下载tar包、./configure、make make install安装路径通常为/usr/local/没有dpkg记录卸载要手动清除文件和相关软链接pyenv或虚拟环境安装通过pyenv管理或者某个项目目录下用python3 -m venv创建的虚拟环境这类“版本”通常只在特定目录或特定shell会话里生效卸载方式跟前面两类完全不同。从热搜词来看“树莓派5上部署自己训练的yolov5模型”“树莓派opencv物体识别”“树莓派控制舵机”这类场景占了很大比例。如果你是因为做AI视觉或硬件控制项目才安装的多余Python那还要额外留意这些项目依赖的Python包大概率安装在dist-packages或site-packages里卸载Python之后这些包不会自动消失会留下垃圾文件后面我会专门讲怎么清理。1.3 卸载前的系统备份与依赖快照动手之前先给当前环境拍个快照。这一步很多人跳过但真出问题时后悔都来不及。先保存当前已经安装Python包清单方便卸载后对比和清理pip3 list ~/pip-list-backup.txt python3.9 -m pip list ~/pip-list-python39.txt然后记录当前软链接的具体指向ls -la /usr/bin/python* ls -la /usr/local/bin/python*可以从这些内容里看到python3指向了哪个版本python3.9、python3.11各自在哪里。把输出内容保存成文本后续恢复环境时能省去大量排查时间。另外建议执行一次完整的系统更新确保apt数据库状态正常后再卸载sudo apt update sudo apt upgrade -y我踩过坑如果apt的依赖状态本身就是坏的卸载一个Python包时可能触发连锁反应把一堆无关包拖下水。2. 卸载前的检查清单动手前必看2.1 查看已安装版本与对应路径在决定卸载之前先完整摸清系统里到底有几个Python版本。推荐用以下命令组合ls /usr/bin/python* ls /usr/local/bin/python* python3 --version还可以用apt专门列出所有跟Python相关的已安装包dpkg -l | grep python这条命令会输出一大堆python3-开头的软件包。注意即使你只装了python3.11一个版本系统里也会有一堆python3-xxx的库包如python3-apt、python3-gpiozero、python3-picamera等这些不要动它们不是“Python版本”而是Python的第三方模块包。区分“版本本体”和“模块包”是这篇内容里最重要的一条经验。版本本体是python3.9、python3.11这种二进制解释器模块包是给解释器提供功能的库。卸载版本时如果误删了系统依赖的模块包会造成功能缺失反过来只删版本、留着一堆模块包就会形成“死依赖”让apt状态不健康。真正需要卸载的“指定版本”在dpkg列表里通常是这样几个包python3.9python3.9-minimallibpython3.9-stdliblibpython3.9-minimal如果当初是用源码编译安装的那在dpkg -l | grep python里看不到对应条目需要手动检查/usr/local/bin/目录下是否存在这个版本的二进制文件。2.2 查询哪些软件在依赖这个Python这个检查是防止“卸载A却弄坏B”的关键步骤。我之前就是因为没做这一步卸载掉一个“觉得没用”的Python版本后发现系统桌面环境崩了因为对方依赖的就是那个版本。可以用apt自动计算依赖关系apt-cache rdepends python3.9或者查看具体某个软件依赖的Python版本号apt-cache depends python3-apt这条会显示python3-apt具体依赖python3 ( 3.x)如果卸载的Python版本是这个依赖条件里唯一能满足的版本就会被牵连损坏。从热搜词里能看到不少人要在树莓派4B或树莓派5上跑OpenCV、YOLOv5、摄像头识别等任务这类项目通常依赖python3-opencv、python3-numpy等系统级包。这些包往往是跟随系统Python版本走的如果你卸载了系统默认Python版本或调整了/usr/bin/python3软链接指向这些包会立刻无法导入。所以卸载之前务必用上面的rdepends命令查一下把受影响范围列成一张“依赖名单”再判断这个版本能不能卸。2.3 记录当前环境变量与软链接树莓派上的Python版本之所以互相打架很大程度是PATH环境变量和软链接在捣乱。which python3返回的是/usr/bin/python3这个位置通常是一个软链接指向某个具体版本比如python3.7 - python3.11。如果你卸载了软链接指向的那个版本会直接出现bash: /usr/bin/python3: No such file or directory。所以检查完依赖之后把当前系统里所有跟Python相关的软链接都记录下来readlink -f /usr/bin/python3 readlink -f /usr/bin/python readlink -f /usr/local/bin/python3同时检查用户目录下的环境变量配置grep -n python ~/.bashrc ~/.profile 2/dev/null如果~/.bashrc里有alias python/usr/local/bin/python3.9这类别名或者PATH变量里手工加入了/usr/local/bin这都可能导致卸载后命令仍然指向一个不存在的文件。把检查结果记录下来后面清理软链接时会非常有用。3. 三种卸载方式详解与选择3.1 方式一apt卸载官方源安装的Python对于通过apt install安装的Python版本这是最正规、最安全的卸载方式。以卸载Python 3.9为例sudo apt remove python3.9系统会提示即将删除的软件包列表和额外会被自动移除的依赖包仔细看一眼列表确认没有删到python3-apt这类关键包之后输入Y确认。如果想要连配置文件一并删干净用purgesudo apt purge python3.9 libpython3.9-stdlib python3.9-minimal之后执行一次自动清理sudo apt autoremoveautoremove会清除掉那些因为安装Python 3.9而自动拉进来、现在不再被需要的依赖包。注意这一步也可能删掉某些“恰好也是其他软件依赖”的包所以执行autoremove前还是先看一眼提示列表比较稳妥。用apt卸载的优点是干净、自动、可追踪缺点是你只能通过这种方式卸载“apt记录在案”的版本。如果你当初不是用apt装的执行apt remove python3.9时会看到“软件包 python3.9 未安装所以未被卸载”的提示这时候请转用3.2节的方法。卸载完成后验证一下python3 --version ls /usr/bin/python3.9 21如果ls提示没有这个文件说明版本本体已经清除。这时候还要检查python3软链接是否仍然有效如果原软链接指向已被删除的版本需要先修复软链接方法见第4章。3.2 方式二清理源码编译安装的Python源码编译安装的Python是树莓派玩家最常见的“事故来源”。很多人下载Python 3.10或3.11的源码包在树莓派上编译安装之后整个系统环境就乱了想卸载却发现apt根本不认识它。清理源码安装的Python主要看两样东西一是当初编译安装的源码目录是否还在二是在/usr/local/下生成的文件列表。如果你还留着源码目录进入目录后执行cd ~/Python-3.9.18 sudo make uninstallmake uninstall会读取Makefile里记录的所有安装路径将对应文件一一删除。这是最省心的源码卸载方式。但很多人编译之后就删了源码目录那就只能手动清理。先确定安装路径which python3.9 ls -la /usr/local/bin/python3.9*手动删除时需要逐个处理二进制文件、软链接和库文件sudo rm /usr/local/bin/python3.9 sudo rm /usr/local/bin/python3.9-config sudo rm -r /usr/local/lib/python3.9 sudo rm -r /usr/local/include/python3.9另外/usr/local/lib/目录下可能还有一个pkgconfig文件需要处理sudo rm /usr/local/lib/pkgconfig/python-3.9.pc sudo rm /usr/local/lib/pkgconfig/python3.9-embed.pc源码编译安装的Python还会留下一些特殊目录如/usr/local/lib/python3.9/site-packages里面装着通过pip手动装进去的包。make uninstall和手动删除二进制都只会删除Python本体不会清除site-packages里的第三方包这些目录需要单独删除否则会残留几十到几百MB的垃圾文件。我用的是直接删掉整个/usr/local/lib/python3.9目录最省事。3.3 方式三删除pyenv或venv里的Python如果你的树莓派环境用了pyenv管理Python版本那卸载起来就要小心因为pyenv管理的Python和系统级Python是隔离的。卸载pyenv里的某个版本只需pyenv uninstall 3.9.18这个命令会在pyenv的版本目录通常在~/.pyenv/versions/3.9.18里把该版本完整清除。如果你确定某个pyenv版本不再需要这个命令是最干净的不需要任何额外操作。如果你当初是在某个项目目录下创建了虚拟环境比如python3 -m venv ~/myproject/venv那要卸载的是整个虚拟环境目录而不是Python解释器。直接删除该目录即可rm -rf ~/myproject/venv删除虚拟环境不会影响系统里的其他Python版本因为venv本质上是把某个Python解释器和一套隔离的site-packages做成了独立目录。但是注意这个目录里可能由项目积累了很多key的包删除之前确认一下这个项目确实不再需要这些依赖了。从实操角度看树莓派上很多人用了虚拟环境还浑然不知——我之前帮人排查问题时发现他每次激活虚拟环境后装的OpenCV、numpy全都堆积在那一个目录里占用了几百MB存储空间。这种就属于“版本还在但空间已经不够用”的典型场景删掉虚拟环境比卸载Python本体更有意义。4. 卸载后的清理与恢复4.1 清理软链接与命令入口不管你是用哪种方式卸载的Python卸载结束后都必须检查软链接是否还有失效的残留。因为树莓派上大量项目是直接调用python3或python命令的而这些命令名往往指向某个具体版本。如果原来的软链接文件还在但目标文件已经被删除执行任何Python脚本都会报错。先看当前python3命令是否还能用python3 --version如果提示-bash: /usr/bin/python3: No such file or directory说明软链接已经失效需要重建。把软链接指向一个仍然存在的Python版本比如3.11sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.11 1或者直接用ln命令建立软链接sudo ln -sf /usr/bin/python3.11 /usr/bin/python3这里要特别说明update-alternatives比直接改软链接更安全因为它会记录优先级未来有多个版本共存时能通过update-alternatives --config python3自由切换。这是在树莓派上管理多个Python版本的正确姿势比你手动改/usr/bin/python3指向要稳固得多。如果你之前给python命令设置过别名也要同步修改。检查~/.bashrc和~/.zshrc中的相关配置删除或更新指向已卸载版本的写法。4.2 清理pip残留包与缓存Python卸载后最大的问题是第三方包残留。特别是源码编译安装的Python其site-packages目录大概率还在磁盘上占着不少空间。对于apt卸载的情况残留的风险相对小因为apt在移除python3相关包时会自动清理/usr/lib/python3/dist-packages下属于该版本的库文件。但对于/usr/local/lib/下的残留基本靠手动。清理思路很简单找到你卸载的那个Python版本的site-packages目录直接整个删掉。sudo rm -r /usr/local/lib/python3.9/site-packages如果之前用pip为这个版本安装过很多包而你现在又要用另一个版本继续跑项目那还要检查新版本环境里是否缺少关键包。比如从Python 3.9切换回Python 3.11后项目需要的opencv、numpy等包需要在新版本里重新安装python3.11 -m pip install --upgrade pip python3.11 -m pip install opencv-python numpy另外树莓派上还有一个容易被忽略的缓存目录~/.cache/pip里面存着pip下载过的wheel包。如果空间紧张可以顺手清理rm -rf ~/.cache/pip清理之后用df -h /看一下根分区的可用空间变化——这一步能直观看到清理效果。4.3 检查系统关键功能是否恢复卸载Python后第一步先确认apt还能正常工作sudo apt update如果apt报错大概率是因为系统Python版本被破坏或dpkg状态混乱。处理办法是用apt-get install -f自动修复依赖sudo apt-get install -f如果修复无效可能要重装基础Python包。实测中一个比较有效的命令组合是sudo apt install --reinstall python3-minimal python3-apt再进一步检查raspi-config之类的官方配置工具是否还能用sudo raspi-config如果raspi-config启动不了通常是因为它依赖的python3或python3-gi模块版本不匹配导致需要针对性重装sudo apt install --reinstall python3-gi我在树莓派4B上卸载Python 3.9后遇到过一次raspi-config无法打开的问题当时就是用这条命令修复的。原因是python3-gi是GTK的Python绑定系统桌面配置界面依赖它如果它链接的是被卸载的那个版本库就会加载失败。4.4 树莓派特有依赖的修复树莓派上跟外围硬件相关的Python库比普通Linux发行版更多。这部分在卸载Python指定版本时要格外小心。常见的有python3-rpi.gpioGPIO引脚控制库python3-gpiozero更为通用的GPIO控制库python3-picamera官方摄像头模块库python3-smbusI2C总线控制python3-spidevSPI接口控制。这些库通常以软件包的形式挂在系统Python版本下面。卸载某个指定Python版本时如果恰好把这些包也删掉了比如apt autoremove误伤重新安装方式如下sudo apt install --reinstall python3-rpi.gpio python3-gpiozero sudo apt install --reinstall python3-picamera python3-smbus检查是否恢复成功可以这样测试GPIO库python3 -c import RPi.GPIO; print(RPi.GPIO.VERSION)如果报错先检查有没有安装pip版的GPIO库有时是从源码装的跟apt的记录不一致pip3 list | grep -i gpio有冲突时先pip uninstall RPi.GPIO再重新用apt安装。摄像头模块在树莓派上经常是项目核心从热搜词树莓派ov5647摄像头模块可以看出这个需求的人很多。如果你卸载Python版本后摄像头采集代码报ImportError: No module named picamera安装方式sudo apt install python3-picamera需要强调的是python3-picamera只适配树莓派官方系统自带的Python版本。如果你用的是自己通过源码编译安装的Python这个库极大概率装不进去或运行异常。这也是一个值得记住的规律树莓派硬件库优先适配系统Python自己编译的Python版本在跑GPIO和摄像头这类硬件操作时踩坑的概率会高很多。5. 踩坑实录我卸载Python时遇到的那些问题5.1 误删系统Python导致apt失效这个坑我印象最深。有一次在树莓派上想清理Python版本执行了sudo apt remove python3——注意是python3而不是python3.x结果整个系统网络和软件管理功能都瘫了。apt报错说找不到/usr/bin/python3很多管理脚本全挂。如果已经走到这一步还有救命的操作从Live镜像或另一台机器上启动树莓派SD卡挂载原系统分区后手动重装python包。或者如果你的树莓派系统里还有另一个版本的Python可以先恢复软链接sudo ln -s /usr/bin/python3.9 /usr/bin/python3然后重建apt的Python依赖sudo apt-get install -f但问题是如果apt自己都跑不起来那这个修复命令也执行不了。更底层的兜底办法是直接用dpkg强制修复绕过aptsudo dpkg --configure -a这条命令会自动重新配置所有处于半安装状态的包实测在“Python被移除但apt保留”的场景下有奇效。所以最稳妥的原则依然是卸载目标指定到具体版本号而不是笼统的python3。python3是一个逻辑入口卸掉它等于拆掉整个系统的依赖地基。5.2 摄像头和GPIO库被连带删掉有一次卸载Python 3.10时apt autoremove顺手删掉了python3-picamera和python3-rpi.gpio我当时没看提示列表直接确认了清除。结果项目启动时摄像头怎么也打不开GPIO口也控制不了排查半天才发现是这两个库被一并清掉了。重新安装很简单sudo apt install python3-picamera python3-rpi.gpio python3-gpiozero但问题在于如果你项目里的脚本是用被卸载的Python版本运行的那装了库也没用——因为新安装的系统库默认事件触发在默认Python上而项目的解释器已经被你删了。所以这里又回到第三章的思路确认你项目的运行解释器是哪一个版本卸载之前先把项目迁移到保留版本上。5.3 pip命令消失与重装方案卸载Python指定版本后系统里的pip命令可能也会失效。这取决于你卸载的是哪个Python版本、pip命令是哪个版本生成的。如果出现pip: command not found先检查当前默认Python还有没有pip模块python3 -m pip --version如果提示No module named pip说明需要补齐pip。树莓派上通常用系统包安装sudo apt install python3-pip如果用的是apt源里的旧版pip而且你需要给指定版本安装新包可以用官方脚本引导安装curl -sS https://bootstrap.pypa.io/get-pip.py --output get-pip.py python3 get-pip.py需要说明的是树莓派官方系统的apt源里pip版本可能滞后如果遇到包版本过低问题用python3 -m pip install --upgrade pip升级即可。另外有一种情况值得提醒pip有多个版本时你执行pip3 install xxx装的包只会进入当前关联的Python环境。如果后续运行脚本用的又不是这个环境就会出现“明明装了却找不到”的错觉。这也是为什么我会建议在树莓派上改用python3.x -m pip这种带版本号的方式从命令层面就把环境锁死。5.4 常见问题速查表问题表现解决方案python3命令失效提示No such file or directorysudo ln -sf /usr/bin/python3.11 /usr/bin/python3重建软链接apt无法正常工作执行任何apt命令都报Python相关错误sudo apt-get install -f或sudo dpkg --configure -apip模块丢失python3 -m pip报No module named pipsudo apt install python3-pip或使用get-pip脚本重新安装GPIO库找不到导入RPi.GPIO报ModuleNotFoundErrorsudo apt install --reinstall python3-rpi.gpio摄像头库失效picamera无法导入sudo apt install python3-picamera桌面环境无法启动登录界面或桌面依赖Python组件崩溃重装python3-gi和python3-gtk相关包编译残留大量垃圾文件/usr/local/lib下多个python版本目录手动删除对应版本的lib、include、bin目录每条解决方案我用过再补充一点不要在一个问题没解决时就急着去执行下一个装包命令这样很容易掩盖真实问题。先把当前报错彻底解决再继续。6. 基于经验的小建议正常情况下我建议把树莓派当作一个“准服务器”来管理而不是频繁变动基础环境的实验板。如果确实需要多版本Python干活用pyenv或虚拟环境隔离比在系统级硬怼多个版本稳妥得多。我自己的固定流程是系统自带Python版本绝不动跑项目的Python一律用虚拟环境这样卸载某个项目环境时只需要rm -rf那个虚拟环境目录系统级依赖毫发无伤。再分享一个小技巧。树莓派上删完一个Python版本后别急着扔SD卡用du -sh /usr/lib/python* /usr/local/lib/python* ~/.cache/pip 2/dev/null看一下实际磁盘占用再结合df -h看剩余空间。这样才能确认自己到底清理出了多大空间也能发现哪些版本的目录是你没注意到而残留下来的。卸载Python指定版本这事本身不复杂真正的难点在于“系统中什么在悄悄依赖它”。先查依赖再做软链接快照最后选择对应的卸载方式三步走完树莓派的环境基本不会翻车。如果你也遇到过其他奇怪的卸载问题欢迎在评论区交流我看了会尽力帮你分析。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。