我下载并编译了最新的 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.4用checkinstall
(而不是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
建议手动删除所有已安装的二进制文件,我认为这可能很危险。
按着这些次序:
- 例如,手动编辑从到
python
中的包名称。小心。新名称一定不能已被使用!同时将“Provides”更改为新名称。/var/lib/dpkg/status
python
python-3.4-checkinstall
- 使用
sudo dpkg-reconfigure python-3.4-checkinstall
。 (注意:dpkg-reconfigure -a
正如所建议的,electrometro
在 Ubuntu 16.04 中不再存在。无论如何它都不需要)。 - 运行
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。 - 使用 checkinstall 从头开始重新安装 python3.4,但不要忘记按照之前的建议更改“Package”名称和“Provides”名称!使用与步骤 1 相同的名称。无需在执行此操作之前手动删除二进制文件。此步骤的目的是全新安装 python3.4,并能够使用新创建的 .deb 文件将其卸载。
就这样!现在一切都应该干净了。实际上,我在步骤 2 之前运行了步骤 3,但这样做应该更干净。
有关信息,我使用 checkinstall 从源包安装 python3.4 的步骤如下:
- 在源目录中,运行
./configure
。 - 跑步
make
- 跑步
sudo checkinstall
- 最重要的一步。此时,他们会询问您是否要在安装前修改任何字段。将“Package”和“Provides”从“python”修改为其他唯一名称(例如我建议的“python3.4-checkinstall”)。
希望能帮助到你!
干杯,尼古拉斯