我看到每个人都在说如何通过奇怪的复制等来解决它,但没有人真正说出问题发生的原因。
所以让我解释一下,对于那些像我一样不想仅仅因为 SO 上的某人告诉他们而弄乱系统文件的人。
问题是:
- 许多系统脚本都将 python3 shebang 硬编码到其中。你可以自己检查一下:
~$ grep -R "\#\!/usr/bin/python3" /usr/lib/*
/usr/lib/cnf-update-db:#!/usr/bin/python3
/usr/lib/command-not-found:#!/usr/bin/python3
/usr/lib/cups/filter/pstotiff:#!/usr/bin/python3
/usr/lib/cups/filter/rastertosag-gdi:#!/usr/bin/python3 -u
grep: /usr/lib/cups/backend/cups-brf: Permission denied
/usr/lib/cups/backend/hpfax:#!/usr/bin/python3
/usr/lib/language-selector/ls-dbus-backend:#!/usr/bin/python3
/usr/lib/python3/dist-packages/language_support_pkgs.py:#!/usr/bin/python3
/usr/lib/python3/dist-packages/softwareproperties/MirrorTest.py:#!/usr/bin/python3
/usr/lib/python3/dist-packages/cupshelpers/installdriver.py:#!/usr/bin/python3
/usr/lib/python3/dist-packages/cupshelpers/openprinting.py:#!/usr/bin/python3
/usr/lib/python3/dist-packages/cupshelpers/xmldriverprefs.py:#!/usr/bin/python3
/usr/lib/python3/dist-packages/cupshelpers/smburi.py:#!/usr/bin/python3
/usr/lib/python3/dist-packages/cupshelpers/ppds.py:#!/usr/bin/python3
/usr/lib/python3/dist-packages/cupshelpers/debug.py:#!/usr/bin/python3
/usr/lib/python3/dist-packages/DistUpgrade/dist-upgrade.py:#!/usr/bin/python3
/usr/lib/python3/dist-packages/CommandNotFound/db/creator.py:#!/usr/bin/python3
/usr/lib/python3/dist-packages/CommandNotFound/db/db.py:#!/usr/bin/python3
/usr/lib/python3/dist-packages/Quirks/quirkreader.py:#!/usr/bin/python3
grep: /usr/lib/ssl/private: Permission denied
/usr/lib/system-service/system-service-d:#!/usr/bin/python3
/usr/lib/ubuntu-release-upgrader/check-new-release-gtk:#!/usr/bin/python3
/usr/lib/ubuntu-release-upgrader/do-partial-upgrade:#!/usr/bin/python3
/usr/lib/ubuntu-release-upgrader/check-new-release:#!/usr/bin/python3
/usr/lib/update-notifier/package-data-downloader:#!/usr/bin/python3
/usr/lib/update-notifier/backend_helper.py:#!/usr/bin/python3
/usr/lib/update-notifier/apt_check.py:#!/usr/bin/python3
/usr/lib/update-notifier/apt-check:#!/usr/bin/python3
- python apt package
python-apt
/python3-apt
是系统包,所以是默认系统python
因此,脚本将始终获取当前链接到的版本python3
,但由于 apt 包不存在而失败。
一般解决方案:永远不要更改默认python3
链接。曾经。这也适用于python
链接——如果一个应用程序是用 Python2 编写的,其中包含一些在 Python3 中不起作用的旧语法元素,则该应用程序将无法工作。
[我的终端出现这种情况是因为我使用了 Terminator,它显然是用 Python2.7 编写的,与 Python3 不兼容。]
此处提供的解决方案建议复制/链接 apt 包文件或更改python3
链接。
让我们分析一下:
- 复制/链接apt包
这应该不是问题,因为从 Python3.4 开始,所有 python 脚本也可以在较新的版本上运行。
至今。但它可能会在未来中断 - 如果您将系统保持足够长的时间。
- 换回
python3
链接
这是一个很好的解决方案,因为我们可以回到“永不更改链接”
“但我喜欢只需要打字python
!” - 我也喜欢这个!这就是我首先解决这个问题的方式!
一般来说,您应该避免手动更改系统链接 -update-alternatives
而是使用链接不同的版本。这适用于具有多个版本的任何应用程序。这仍然会破坏那些系统脚本(因为它确实会更改链接),但是您可以轻松地来回切换,而不必担心您是否将链接和目标按正确的顺序放置或打错了。
考虑为您的链接或别名使用除python
/之外的其他名称。python3
或者将您自己的python
/python3
链接添加到 PATH(就像虚拟环境一样),而不更改系统链接。