出现此问题的原因

出现此问题的原因

我下载并编译了最新的 python 3.5,并使用 checkinstall 进行了安装。现在我在 apt 中得到了一大堆缺少依赖项的软件包。

apt-xapian-index : Depends: python (< 2.8) but 3.5.0-1 is to be 

installed
 duplicity : Depends: python (< 2.8) but 3.5.0-1 is to be installed
 gconf2 : Depends: python:any
 .
 .
 .
 totem-plugins : Depends: python:any (>= 2.6.6-7~)
 ubuntu-system-service : Depends: python (< 2.8) but 3.5.0-1 is to be installed
                         Depends: python:any (>= 2.7.1-0ubuntu2)
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).

但是我仍然安装了python,包括2.7.9。

$ which python
/usr/bin/python
$ python
Python 2.7.9 (default, Apr  2 2015, 15:33:21) 
[GCC 4.9.2] on linux2

$ which python3
/usr/local/bin/python3
$ python3
Python 3.5.0 (default, Sep 13 2015, 19:47:21) 
[GCC 4.9.2] on linux

我该如何删除我安装的软件包或者修复依赖项而看不到 python3 已安装?

此外,python3.4 仍然处于/usr/bin/python3

编辑:我知道它想让我这么做apt-get -f install,但是它删除了大量的东西,我真的不认为这是解决问题的正确方法。

答案1

谢天谢地,我能够修复它。我担心我必须重新安装 ubuntu。

我去手动编辑/var/lib/dpkg/status并删除了所做的条目checkinstall

删除后,我转到/usr/local/bin并删除了所有 python 3.5 内容。我还确保 python3-4 仍在/usr/bin/。然后我做了 a sudo dpkg-reconfigure -a,最后做了 a apt-get -f install,只有 1 个东西“缺失”了,那就是 python。

然后我按照 README 中的说明,设法以正确的方式安装它,然后删除指向 python3.4 的符号链接并创建一个指向 python3.5 的新符号链接。

答案2

安装后我遇到了同样的问题python3.4checkinstall(而不是python3.5为了electrometro

出现此问题的原因

我首先发现了为什么会发生此问题。

当使用 Python 3.4 源创建 .deb 文件checkinstall然后安装它时,checkinstall 设置的默认包名称是“Python“。

因此,checkinstall在使用 !! 安装新包之前,请先卸载名为 python 的包dpkg。此包已存在于 Ubuntu 中。它基本上与 python2 相关联!出于某种原因,我认为它dpkg会尝试删除您正在安装的 python 版本,即python3.4在我的情况下失败了。这就是为什么仍然安装了 python2。但dpkg仍然相信“Python“软件包已被删除并被新安装的软件包(python3.4)替换。文件 /var/lib/dpkg/status 已进行了相应编辑。就我而言,以下是与此安装相关的更新:

包裹:Python
地位:卸载确定安装
优先级:额外
部分:checkinstall
安装大小:167520
维护者:root@laptop
架构:amd64
版本:3.4.3-1
提供:python
描述:使用checkinstall 1.6.2创建的软件包`

如您所见,包名称为“Python“并且包裹已经”卸载“在被已安装再次。

因此,dpkg认为“Python“(python2!)不再存在,建议您在调用时删除所有依赖于它的内容apt-get -f install

避免该问题的解决方案:

使用 checkinstall 时,只需选择不同的“Package”名称和“Provides”名称!例如,两者都选择 python3.4-checkinstall。

问题发生后如何解决

为了解决这个麻烦,我有一个解决方案,使您不必按照electrometro建议手动删除所有已安装的二进制文件,我认为这可能很危险。

按着这些次序:

  1. 例如,手动编辑从到python中的包名称。小心。新名称一定不能已被使用!同时将“Provides”更改为新名称。/var/lib/dpkg/statuspythonpython-3.4-checkinstall
  2. 使用sudo dpkg-reconfigure python-3.4-checkinstall。 (注意:dpkg-reconfigure -a正如所建议的,electrometro在 Ubuntu 16.04 中不再存在。无论如何它都不需要)。
  3. 运行apt-get -f install该命令将再次安装原始python包!此时您可以在此处停止,但如果您尝试sudo dpkg-query -L python3.4-checkinstall:dpkg 不知道已安装哪些文件!因为文件 /var/lib/dpkg/info/python3.4-checkinstall.list 不存在!文件 /var/lib/dpkg/info/python.list 已被覆盖apt-get -f install。请参阅Debian 文档欲了解更多信息dpkg。要解决此问题,您必须执行步骤 4。
  4. 使用 checkinstall 从头开始​​重新安装 python3.4,但不要忘记按照之前的建议更改“Package”名称和“Provides”名称!使用与步骤 1 相同的名称。无需在执行此操作之前手动删除二进制文件。此步骤的目的是全新安装 python3.4,并能够使用新创建的 .deb 文件将其卸载。

就这样!现在一切都应该干净了。实际上,我在步骤 2 之前运行了步骤 3,但这样做应该更干净。

有关信息,我使用 checkinstall 从源包安装 python3.4 的步骤如下:

  1. 在源目录中,运行./configure
  2. 跑步make
  3. 跑步sudo checkinstall
  4. 最重要的一步。此时,他们会询问您是否要在安装前修改任何字段。将“Package”和“Provides”从“python”修改为其他唯一名称(例如我建议的“python3.4-checkinstall”)。

希望能帮助到你!

干杯,尼古拉斯

相关内容