python 3.10 未满足的依赖项

ste*_*011 23 lts apt kubuntu 20.04

这是具体问题:

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).
Run Code Online (Sandbox Code Playgroud)

我应该清除或重新安装哪个软件包?系统不允许两者都不做autoremove, fix broken, dist-upgrade

库班图 20.04 LTS

iyr*_*rin 46

编辑:总而言之,我清除了软件包并将 python3.10 安装为新软件包。根据其他关注此内容的人的说法,您不需要我一样删除和添加 ppa。我将从答案中删除它。还有人建议,当这个问题在过去的版本中出现时,仅仅强制安装就可以了。sudo apt install -yf我无法验证,因为我做了以下操作:

我已经使用deadsnakes安装了 Python 3.10 。

问题和解决方案描述如下:
libpython3.10-minimal and libpython3.10-stdlib failed to install #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-最小

新安装成功!


对谨慎的初学者的解释

用于清除 python3.10 包的命令是:
sudo apt --fix-missing purge $(dpkg -l | grep 'python3\.1[01]' | awk '{print $2}')

的描述--fix-missing位于man -apt-get

忽略丢失的包裹;如果无法检索包或检索后未通过完整性检查(包文件损坏),则保留这些包并处理结果。在某些情况下,将此选项与 -f 一起使用可能会产生错误。如果选择安装某个软件包(特别是在命令行中提到该软件包)并且无法下载该软件包,那么它将被静默地阻止。

清除

purge 与删除相同,只是删除并清除了包(所有配置文件也被删除)。

对于包名称,使用命令替换。

dpkg -l 包名称模式...

列出与给定模式匹配的包。

由于没有为 dpkg 提供模式,因此将返回所有已安装软件包的列表。该列表不是通过管道输入的,而是通过管道输入的grep,因此我们可以使用该模式'python3\.1[01]'将列表范围缩小到已安装的 python3.10 软件包。然后将这些结果通过管道传输到awk '{print $2}'.

awk '{print $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
Run Code Online (Sandbox Code Playgroud)

最终结果与您自己输入所有 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
Run Code Online (Sandbox Code Playgroud)

现在系统应该准备好新安装 python3.10。

  • 不要执行 `alias python='python3.10'`。整个包管理系统可能会崩溃。请参阅 https://askubuntu.com/q/1374341/124466 要么使用虚拟环境,要么使用“python3.10”调用它。 (4认同)

小智 6

这就是我为我解决的方法:

$ sudo dpkg --force-depends --purge libpython3.10-stdlib
Run Code Online (Sandbox Code Playgroud)

您将收到警告 - 忽略。下一个:

$ sudo apt --fix-broken install
Run Code Online (Sandbox Code Playgroud)

最后:

$ sudo apt update
Run Code Online (Sandbox Code Playgroud)