Python 2 软件包和 Python 2 解释器的版本差异

Python 2 软件包和 Python 2 解释器的版本差异

我不太明白为什么我的 Ubuntu 16.04 系统上的各种 Python 2 包和 Python 2 解释器之间存在明显的版本差异。

跑步

$ readlink -e $(which python python2)
/usr/bin/python2.7
/usr/bin/python2.7

$ python --version && python2 --version
Python 2.7.12
Python 2.7.12

告诉我pythonpython2符号链接到python2.7并且我的系统上的 Python 2 解释器版本是Python 2.7.12。到目前为止一切顺利,没有什么令人惊讶的。

跑步

$ dpkg -s python | grep Version
Version: 2.7.11-1

告诉我该包的版本python2.7.11-1,这与 Python 2 解释器的版本不一致。

另一方面,跑步

$ dpkg -s python2.7 | grep Version
Version: 2.7.12-1~16.04

告诉我该包的版本python2.72.7.12,这与 Python 2 解释器的版本一致。

假设 Python 2 解释器的版本为2.7.12,那么解释器是否仅由python2.7包提供? 如果是这样,python如果包不提供系统当前使用的解释器,它会怎么做?

答案1

解释器/usr/bin/python2.7由包提供python2.7-minimal,如您所见apt-file search /usr/bin/python2.7python包就是所谓的元包:由于 Python 安装分为几个包,因此该python包提供了一种一次性安装所有包的简单方法。如果有人只需要最低限度的安装,他们可以只安装该python2.7-minimal包。

答案2

默认情况下,您安装了多个版本的 Python。如果程序需要特定版本,则作者将通过路径名调用该版本。

如果您没有作者要求的版本,您可以安装该特定版本。您仍然可以保留默认版本选择,该版本/usr/bin/python与版本号符号链接。就您而言,它最有可能链接到/usr/bin/python2.7

您可以使用以下方式查看已安装的版本:

$ ls -ld /usr/bin/python*

我的回答主要针对你问题的最后一部分If so, what does the python package do if it doesn't provide the interpreter that the system currently uses?

当你运行时,python它会搜索你的路径并找到/usr/bin/python链接到的/usr/bin/python。所以你实际上是在检查的版本/usr/bin/python2.7

此外,有时版本输出中的差异取决于检查的方法。在本例中,通过实际程序进行检查和通过分发包装进行检查。当发生这种情况时,实际程序中的版本标记很可能更准确。

验证 Python 解释器的实际版本的另一种方法是从命令行运行它:

$ python

输出:

Python 2.7.12 (default, Jul  1 2016, 15:12:24) 
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 


$ python2.7

输出:

Python 2.7.12 (default, Jul  1 2016, 15:12:24) 
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>

相关内容