谨慎初学者的解释

谨慎初学者的解释

以下是具体问题:

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-*

相关内容