安装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
建议手动删除所有已安装的二进制文件,我认为这可能是危险的。
跟着这些步骤:
- 例如,手动编辑
/var/lib/dpkg/status
的包名称python
从python
到python-3.4-checkinstall
。 小心。 新名称一定不能使用! 同时将“提供”更改为新名称。 - 使用
sudo dpkg-reconfigure python-3.4-checkinstall
。 (注意:在Ubuntu 16.04中不再存在dpkg-reconfigure -a
和建议的electrometro
。无论如何都不需要)。 - 运行
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步。 - 使用checkinstall从头开始重新安装python3.4,但不要忘记更改“Package”名称和前面建议的“Provide”名称! 使用与步骤1中相同的名称 。在执行此操作之前,无需手动删除二进制文件。 这一步的重点是干净安装python3.4并能够使用新创建的.deb文件卸载它。
就是这样! 现在一切都应该干净。 我实际上在第2步之前运行了第3步,但这样做应该更干净。
有关信息,我使用checkinstall从源包安装python3.4的步骤如下:
- 在源目录中,运行
./configure
。 - 运行
make
- 运行
sudo checkinstall
- 最重要的一步 。 此时,他们会询问您是否要在安装之前修改任何字段。 将“python”中的“Package”和“Provide”修改为不同的唯一名称(如我所建议的那样“python3.4-checkinstall”)。
希望能帮助到你!
干杯,尼古拉斯
- 由于GPG错误无法更新我的系统Clearsigned文件无效,得到’NODATA’
- apt全升级与apt-get dist-upgrade
- E:需要重新安装软件包,但我找不到它的存档
- 无法安装’openjdk-9-jdk’,因为它试图覆盖’openjdk-9-jdk-headless’中包含的文件’
- apt-get vs. aptitude .vs synaptic compatibility
- 如何在控制台上显示命令行的输出并将输出保存到文本文件中?
- 如何在没有grub配置提示的情况下apt-get -y dist-upgrade?
- E:列表文件/etc/apt/sources.list(Component)中的格式错误的条目54
- 使用cron自动化时为什么apt-get会失败?