我不太明白为什么我的 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
告诉我python
和python2
符号链接到python2.7
并且我的系统上的 Python 2 解释器版本是Python 2.7.12
。到目前为止一切顺利,没有什么令人惊讶的。
跑步
$ dpkg -s python | grep Version
Version: 2.7.11-1
告诉我该包的版本python
是2.7.11-1
,这与 Python 2 解释器的版本不一致。
另一方面,跑步
$ dpkg -s python2.7 | grep Version
Version: 2.7.12-1~16.04
告诉我该包的版本python2.7
是2.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.7
。python
包就是所谓的元包:由于 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.
>>>