安装python 3.5后apt依赖项的问题

我下载并编译了最新的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.6.6-7~) ubuntu-system-service : Depends: python (= 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但它删除了大量的东西,我真的不认为这是解决它的正确方法。

谢天谢地,我能够解决它。 我担心我将不得不重新安装ubuntu。

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

一旦删除,我去了/usr/local/bin并删除了所有的python 3.5内容。 我还确保python3-4仍然在/usr/bin/ 。 然后我做了一个sudo dpkg-reconfigure -a ,最后是一个apt-get -f install ,只有一件事’缺少’就是python。

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

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

出现此问题的原因

我发现为什么这个问题确实发生在第一位。

当使用checkinstall从Python 3.4源创建.deb文件然后安装它时,checkinstall设置的默认package-name是“ python ”。

因此, checkinstall在使用dpkg安装新软件包之前卸载名为python的软件包!! 这个包已经存在于Ubuntu中。 它基本上链接到python2! 出于某种原因希望,我认为dpkg试图删除你正在安装的python版本,即我的情况下的python3.4但是失败了。 这就是仍然安装python2的原因。 但dpkg仍然认为“ python ”软件包已被删除,并被安装的新软件包取代(python3.4)。 已相应编辑文件/ var / lib / dpkg / status。 在我的情况下,这里是与此安装相关的更新:

包: python
状态:已安装deinstall ok
优先级:额外
部分:checkinstall
已安装尺寸:167520
维护者:root @ laptop
架构:amd64
版本:3.4.3-1
提供:python
描述:使用checkinstall 1.6.2`创建的包

正如您所看到的那样,包名称是“ python ”,并且在再次安装之前包已经“ deinstall ”。

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

避免此问题的解决方案:

使用checkinstall时,只需选择不同的“包”名称和“提供”名称即可! 例如python3.4-checkinstall。

如何解决已经发生的问题

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

跟着这些步骤:

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

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

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

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

希望能帮助到你!

干杯,尼古拉斯