以下是具体问题:
The following packages have unmet dependencies:
libpython3.10-stdlib : Depends: libpython3.10-minimal (= 3.10.4-1+focal1) but it is not going to be installed
python3.10-minimal : Depends: libpython3.10-minimal (= 3.10.4-1+focal2) but it is not going to be installed
Recommends: python3.10 but it is not going to be installed
E: Unmet dependencies. Try 'apt --fix-broken install' with no packages (or specify a solution).
我应该清除或重新安装哪个软件包?系统不允许我这样做autoremove, fix broken, dist-upgrade
?
Kubuntu 20.04 LTS
答案1
编辑:总而言之,我清除了软件包并安装了 python3.10 作为新软件包。根据其他关注此事的人的说法,你确实不是需要像我一样删除并添加 ppa。我将从答案中删除它。也有人建议仅仅强制安装sudo apt install -yf
在过去的版本中出现此问题时,使用 可以解决问题。我无法验证,因为我执行了以下操作:
我已经使用以下方式安装了 Python 3.10死蛇。
该问题和解决方案描述如下:
libpython3.10-minimal 和 libpython3.10-stdlib 安装失败 #207
我运行了建议的命令(在本答案的末尾有更详细的解释):
sudo apt --fix-missing purge $(dpkg -l | grep 'python3\.1[01]' | awk '{print $2}')
这引发了:
以下软件包将被删除:idle-python3.10* libpython3.10-minimal* libpython3.10-stdlib*
libpython3.10-testsuite* python3.10* python3.10-distutils*
python3.10-examples* python3.10-full* python3.10-gdbm* python3.10-lib2to3* python3.10-minimal* python3.10-tk* python3.10-venv*
请注意,此命令可能会删除其他软件包。
根据建议,我运行了:
sudo apt --fix-broken install
由于它已被清除,因此无需修复。
接下来我继续升级不相关的软件包,然后继续:
sudo apt upgrade
此时,运行python --version
显示已回滚到 Python 3.8.10。我想要再次使用 Python 3.10,因此我运行:
sudo apt install python3.10
这引发了:
将会安装以下附加软件包:
libpython3.10-minimal libpython3.10-stdlib python3.10-minimal 建议的软件包:python3.10-venv 将会安装以下新软件包:libpython3.10-minimal libpython3.10-stdlib python3.10 python3.10-minimal
新安装成功!
谨慎初学者的解释
用于清除 python3.10 包的命令是:
sudo apt --fix-missing purge $(dpkg -l | grep 'python3\.1[01]' | awk '{print $2}')
的描述--fix-missing
可以在以下位置找到man -apt-get
:
忽略缺失的软件包;如果无法检索软件包或检索后完整性检查失败(软件包文件损坏),则保留这些软件包并处理结果。在某些情况下,将此选项与 -f 一起使用可能会产生错误。如果选择安装某个软件包(特别是如果在命令行中提到该软件包)但无法下载,则将默默保留该软件包。
清除:
purge 与 remove 相同,只是删除和清除了软件包(所有配置文件也被删除)。
对于包名称,命令替换用来。
dpkg -l 软件包名称模式...:
列出与给定模式匹配的包。
由于没有为 dpkg 提供模式,因此返回所有已安装软件包的列表。代替模式,列表是管道所以grep
我们可以使用模式'python3\.1[01]'
将列表缩小到已安装的 python3.10 包。然后这些结果被输入到awk '{print $2}'
。
awk'{打印$2}':
简单来说,这个 awk 是一个模式扫描命令。在这里它只返回列表中每一行的包名称。为了更好地理解,请一起运行这些命令并观察输出:
dpkg -l | grep 'python3\.1[01]' | awk '{print $2}'
这应该输出所有已安装的 python3.10 包名称的列表,例如:
libpython3.10-minimal:amd64
libpython3.10-stdlib:amd64
python3.10
python3.10-distutils
python3.10-lib2to3
python3.10-minimal
python3.10-venv
最终结果与您自己输入所有 python3.10 包的结果相同:
sudo apt --fix-missing purge libpython3.10-minimal:amd64 libpython3.10-stdlib:amd64 python3.10 python3.10-distutils python3.10-lib2to3 python3.10-minimal python3.10-venv
现在系统应该准备好安装python3.10了。
答案2
这是我修复它的方法:
$ sudo dpkg --force-depends --purge libpython3.10-stdlib
您将收到一条警告 - 忽略。下一步:
$ sudo apt --fix-broken install
最后:
$ sudo apt update
答案3
以下对我有用:
sudo dpkg -i --force-overwrite /var/cache/apt/archives/libpython3.10-*