在Ubuntu 20.04中,python-is-python3软件包是什么,它实际上是做什么的?

使用Ubuntu 18.04已经有几年了,而且听说Ubuntu 20.04已经移除了Python 2,所以我期待着能够使用命令pythonpip而不是python3pip3。所以今天我第一次尝试了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

如何使'python'程序命令执行Python 3?

这三个链接中间的那个最具描述性,但是没有一个特别清楚说明python-is-python3是什么/做什么以及如果在Ubuntu 20.04安装上运行sudo apt-get install python-is-python3会产生的全部影响。

以下是我对python-is-python3有关的一些问题:

1.

python-is-python3是Ubuntu/Canonical专有的吗?如果是,其他Linux发行版是否也使用python-is-python3,或者其他发行版是否有类似的替代品?

2.

我了解到如果我在命令提示符下运行python-is-python3,那么我可以使用python命令而不是python3。首先,有人可以确认这一点吗?其次,对于pip命令是否也是如此,即使用pip而不是pip3

3.

上面的launchpad.net链接提到了创建一个符号链接。真的只是为了创建一个单一的符号链接而引入了python-is-python3包吗?这似乎有些奇怪。另外,如果卸载了这个包(例如:sudo apt --purge remove python-is-python3),会删除这个符号链接吗?

4.

现在还有常用的Python 2包吗?我一时想不起来有哪些。

5.

有人运行过python-is-python3,然后后悔了吗?原因是之前没有意识到的。

6.

运行python-is-python3的好处似乎是不需要在Python命令的末尾添加3,但缺点是你会有一个非标准的Ubuntu设置,这个总结对于python-is-python3的好处和缺点来说公平吗?


5
  1. 。2) 是的。不。3) 是的。是的。4) 不。5) 无法确定,因为我们这里不允许发表怨言或评论。6) 是的。
- user535733
其他发行版有类似的替代品吗?RHEL8做了类似的事情,破坏了所有以#!/usr/bin/env python开头的脚本。而我现在使用的Manjaro似乎更顺利地处理了从Python 2到3的转换。 - Aaron F
2个回答

根据您链接到的软件包描述所述:
在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 bugpython3软件包自动将pip指向pip3

如果你打开这个软件包的`.deb`文件(我使用过7-Zip),你会看到除了一些文档外,实际上只包含一个符号链接,将被安装到`/usr/bin/python`,指向`/usr/bin/python3`。

8关于pip - 为了避免意外情况(想象一下:系统中有许多Python版本,加上conda环境,再加上虚拟环境...),通常最好将其作为[/path/to/]python -m pip ...来运行。 - Tomasz Gandor

在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,所以我卸载了它。

1看一下我的https://askubuntu.com/questions/1295530/python-and-virtualbox-vs-virtualbox-6-1,它会解释为什么安装了python-is-python2。 - heynnema
我认为你需要提供参考资料的网址。 - Good Pen
我使用的参考是apt show python-is-python3的输出结果。 - karel