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。
小智 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)
| 归档时间: |
|
| 查看次数: |
39413 次 |
| 最近记录: |