在 Ubuntu 16.04 上,我从 deadsnakes PPA 安装了 Python 3.6。现在我升级到了 Ubuntu 18.04,它基于 Python 3.6 构建,但它没有删除旧版本的 Python 3.6,而是保留了 deadsnakes PPA 中的版本,如果我想安装任何与 Python 相关的东西,就会出现依赖性问题。例如,如果我运行sudo apt install python3.6-venv
:
The following packages have unmet dependencies:
python3.6-venv : Depends: python3.6 (= 3.6.5-3) but 3.6.6-1+xenial1 is to be installed
有没有一种安全的方法来删除3.6.6-1+xenial1
而不删除所有依赖于它的东西来安装默认的 Python 3.6?否则,我将不得不从头开始重新安装 Ubuntu。
一个相关的问题是无法使用 apt-get 安装,缺少 python不幸的是,给出的唯一答案建议手动删除并重新安装 python3.6,这将导致删除大约 218 个软件包。这就是我想要避免的。sudo apt-get remove python3.6
:
The following packages will be REMOVED:
apparmor apport apport-gtk aptdaemon apturl apturl-common asymptote atom
cdbs command-not-found compiz compiz-gnome dh-python firefox
foomatic-db-compressed-ppds gconf2 gdm3 gedit gedit-common gir1.2-ibus-1.0
gnome-control-center gnome-menus gnome-online-accounts gnome-orca
gnome-shell gnome-software gnome-software-plugin-snap gnome-terminal
...
答案1
阅读完问题下面的评论后,我成功地重新安装了 python3.6,并想与大家分享我是如何做到的。
- 我备份了所有数据,我建议所有尝试此方法的人都这样做。虽然对我来说这种方法有效,但可能由于某些原因在您的机器上失败,您也不想丢失数据。
- 我确保 deadsnakes PPA 已被停用。
我运行了以下命令来删除旧版本的 python3.6,而不删除所有依赖项并直接安装默认版本。
sudo dpkg --remove --force-depends python3.6 python3.6-minimal libpython3.6-minimal libpython3.6-stdlib sudo apt-get install python3.6 python3.6-minimal libpython3.6-minimal libpython3.6-stdlib
我运行
sudo apt-get update
并sudo apt-get upgrade
重新启动我的机器。
也许这太复杂了,但对我来说还是有用的。非常感谢@wjandrea、@Ray、@Zanna 的评论。
答案2
对于像我这样确认要删除 200 个软件包的人,我能够使用非图形会话(Ctrl++ Alt)F1来重新安装 gnome(或者 cinnamon,我已经安装了它们,但在删除 python3.6 时它们都被删除了)。
答案3
删除重要软件包是有风险的,所以不要这样做。
/etc/apt/sources.list.d/deadsnakes.list
首先,我通过编辑和注释掉这些行来禁用 deadsnakes PPA 。
apt-get
可以将一组软件包降级到指定的版本:
sudo apt-get install idle-python3.9=3.9.2-1 libpython3.9=3.9.2-1 libpython3.9-dev=3.9.2-1 libpython3.9-minimal=3.9.2-1 libpython3.9-stdlib=3.9.2-1 python3.9=3.9.2-1 python3.9-dev=3.9.2-1 python3.9-minimal=3.9.2-1 python3.9-venv=3.9.2-1
我使用此脚本生成了降级 Python 的命令。您可以更改设置以匹配您的问题。
#!/bin/sh
from_release="focal"
from_version="3.9"
to_version="3.9.2-1"
packages=`dpkg -l '*python*' | grep $from_release | grep $from_version | awk '{print $2}' | sed 's/:amd64//' | sed "s/\$/=$to_version/"`
set -x
sudo apt-get install $packages
然后,我添加了设置,希望可以防止这种情况再次发生/etc/apt/preferences.d/99dontbreakdebian
。我使用的是 Debian bullseye / testing,所以我的文件不适合 Ubuntu。您可以pin
使用apt-cache policy
命令查看选项。
不要直接复制此文件。您需要理解它,调整您的设置,并仔细测试它:
Package: *
Pin: release o=Debian,a=experimental
Pin-Priority: 1
Package: *
Pin: release o=Debian,a=unstable
Pin-Priority: 100
Package: *
Pin: release a=focal
Pin-Priority: 100
Package: *
Pin: release o=LP-PPA-deadsnakes
Pin-Priority: 100
Package: *
Pin: origin ppa.launchpad.net
Pin-Priority: 100
Package: *
Pin: release o=Debian
Pin-Priority: 990