树莓派python-rpi.gpio依赖故障导致apt/dpkg操作失败求助
我完全理解你的困境——树莓派上有重要工作任务,不想重装系统丢失数据,却被这个顽固的python-rpi.gpio错误卡住,每次APT操作都失败。咱们一步步来解决这个问题:
先梳理你的问题现状
- 每次执行安装、升级或
autoremove操作都会触发错误 - 未安装Python2.7,仅安装了Python3,无法安装Python2或其他软件包
- 尝试删除
python-rpi.gpio_0.7.0-0.1~bpo10+4_armhf.deb但文件反复出现 - 已试过
sudo apt-get install -f和sudo apt update --fix-missing,无效 - 执行
sudo dpkg --remove --force-remove --reinstreq时提示dpkg: error: unknown force/refuse option 'remove'
你执行sudo apt autoremove的错误输出如下:
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
python-rpi.gpio
The following packages will be upgraded:
python-rpi.gpio
1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
18 not fully installed or removed.
Need to get 0 B/20.7 kB of archives.
After this operation, 0 B of additional disk space will be used.
Do you want to continue? [Y/n] y
Reading changelogs... Done
(Reading database ... 152893 files and directories currently installed.)
Preparing to unpack .../python-rpi.gpio_0.7.0-0.1~bpo10+4_armhf.deb ...
/var/lib/dpkg/info/python-rpi.gpio.prerm: 6: /var/lib/dpkg/info/python-rpi.gpio.prerm: pyclean: Too many levels of symbolic links
dpkg: warning: old python-rpi.gpio package pre-removal script subprocess returned error exit status 2
dpkg: trying script from the new package instead ...
/var/lib/dpkg/tmp.ci/prerm: 6: /var/lib/dpkg/tmp.ci/prerm: pyclean: Too many levels of symbolic links
dpkg: error processing archive /var/cache/apt/archives/python-rpi.gpio_0.7.0-0.1~bpo10+4_armhf.deb (--unpack):
new python-rpi.gpio package pre-removal script subprocess returned error exit status 2
/var/lib/dpkg/info/python-rpi.gpio.postinst: 6: /var/lib/dpkg/info/python-rpi.gpio.postinst: pycompile: Too many levels of symbolic links
dpkg: error while cleaning up:
installed python-rpi.gpio package post-installation script subprocess returned error exit status 2
Errors were encountered while processing:
/var/cache/apt/archives/python-rpi.gpio_0.7.0-0.1~bpo10+4_armhf.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)
第一步:修复Python符号链接循环问题
错误提示里的Too many levels of symbolic links是核心原因,说明系统中python的符号链接出现了循环(比如python链接到python3,而python3又链接回python)。
先检查当前的Python符号链接:
ls -l /usr/bin/python ls -l /usr/bin/python3如果发现
python和python3互相指向对方,就确认存在循环链接。修复循环链接:
sudo rm /usr/bin/python sudo ln -s /usr/bin/python3 /usr/bin/python这样就建立了
python指向python3的正确单向链接。
第二步:强制清理异常的python-rpi.gpio包
你之前用错了dpkg命令,正确的强制操作步骤如下:
强制移除状态异常的python-rpi.gpio包:
sudo dpkg --remove --force-all python-rpi.gpio彻底清理缓存中反复生成的deb文件:
sudo rm /var/cache/apt/archives/python-rpi.gpio_0.7.0-0.1~bpo10+4_armhf.deb修复APT依赖关系:
sudo apt-get install -f
第三步:如果上述步骤无效,手动修改包脚本
如果还是因为prerm/postinst脚本调用pyclean/pycompile报错,我们可以临时修改这些脚本,跳过有问题的步骤:
编辑旧包的预移除脚本:
sudo nano /var/lib/dpkg/info/python-rpi.gpio.prerm找到第6行的
pyclean命令,在行首添加#注释掉这一行,保存退出(按Ctrl+O→回车→Ctrl+X)。同样处理旧包的 post-install 脚本:
sudo nano /var/lib/dpkg/info/python-rpi.gpio.postinst找到第6行的
pycompile命令,也注释掉它。再次尝试移除包并修复依赖:
sudo dpkg --purge python-rpi.gpio sudo apt-get install -f
完成这些步骤后,应该就能正常使用APT命令了。如果之后需要使用GPIO功能,建议安装Python3版本的包:sudo apt install python3-rpi.gpio,避免再触发Python2相关的脚本问题。
内容的提问来源于stack exchange,提问作者André Clérigo

