我已经使用 Ubuntu 18.04 几年了,并且了解到 Python 2 已从 Ubuntu 20.04 中删除,所以我很期待使用命令python
或pip
而不是python3
或pip3
。所以今天我第一次尝试了 Ubuntu 20.04,发现:
$ python --version
Command 'python' not found
$ python3 --version
Python 3.8.5
我感到很惊讶,经过进一步调查,我发现了有关该包裹的以下信息python-is-python3
:
https://packages.ubuntu.com/focal/python-is-python3
https://launchpad.net/ubuntu/focal/+package/python-is-python3
这 3 个链接中间的链接描述性最强,但没有一个特别清楚说明它是什么/做什么,以及如果在 Ubuntu 20.04 安装上运行会产生怎样python-is-python3
的全部影响。sudo apt-get install python-is-python3
以下是我的一些疑问python-is-python3
:
是
python-is-python3
Ubuntu/Canonical 专有的吗?如果是,其他 Linux 发行版是否python-is-python3
也使用,或者其他发行版是否有类似的等效产品?我推测如果我要从命令提示符运行,
python-is-python3
那么我可以使用命令python
而不是。首先,有人可以确认这一点吗?其次,对于 ,即而不是python3
,是否也同样适用?pip
pip
pip3
上面的 launchpad.net 链接提到了符号链接的创建。
python-is-python3
真的只创建一个符号链接吗?为如此简单的目的引入一个包似乎很奇怪。此外,如果随后卸载此包(i.e. sudo apt --purge remove python-is-python3
),这会删除符号链接吗?还有常用的 Python 2 软件包吗?我一下子想不起来了。
是否有人跑步
python-is-python3
后由于事先没有意识到的原因而后悔了?运行的好处似乎
python-is-python3
是不必在 Python 命令末尾添加 3,但缺点是您将拥有一个非标准的 Ubuntu 设置,这是对优点python-is-python3
/缺点的公平总结吗?
答案1
作为您链接到的软件包描述说:
在 Ubuntu 中,所有 python 包都使用显式的 python3 或 python2 解释器,并且根本不使用未版本化的 /usr/bin/python ... 没有包可以声明对此包的依赖关系。
因此,所有官方 Ubuntu 软件包都将明确依赖于“python2”或“python3”,并调用相应的命令。默认的“python”命令故意未定义,因此引用它的任何脚本都必须更新为明确依赖于一个版本或另一个版本。
然而,用户可能有依赖于“python”命令的代码,并且知道他们可以安全地指向它在整个系统中一个版本或另一个版本。软件包python-is-python3
(和它的对应物,python-is-python2
) 是为此目的设置符号链接的便捷方法。
python-is-python3 真的只创建一个符号链接吗?为了如此简单的目的而引入一个包似乎很奇怪。
Linux 发行版是由大量简单组件组成的极其复杂的系统。软件包管理器的强大之处在于它们能够以统一的方式灵活地执行此类简单操作。例如,服务器设置脚本可能有一个很长的apt
软件包列表,应用程序需要安装这些软件包,并且可以简单地将其包含python-is-python3
在该列表中。为此目的运送软件包是相当简单而不是有一个用户指南来解释如何手动管理符号链接。
对于 也同样适用
pip
,即pip
而不是 吗pip3
?
显然不是——根据这个 LaunchPad 错误,无论如何,python3
包裹都会自动指向。pip
pip3
如果你打开.deb
该包的文件(我使用了 7-Zip),你会看到,除了一些文档之外,它实际上只包含一个符号链接,安装在/usr/bin/python
,指向/usr/bin/python3
。
答案2
在 Ubuntu 中,所有 Python 软件包都使用显式 Python3 或 Python2 解释器,/usr/bin/python
根本不使用未版本化的解释器。一些第三方代码现在主要基于 Python3,但可能会使用/usr/bin/python
。
python-is-python3 是一个便利包,它提供了一个符号链接,将/usr/bin/python
解释器指向当前默认的 python3。它可能会提高与其他现代系统的兼容性,同时破坏一些过时或第三方软件。
python-is-python3 替换:python、python-is-python2。
我在 Ubuntu 20.04 中安装了 python-is-python3 作为便利包,但是后来 python2.7 作为另一个包的依赖项自动安装后,我卸载了它。