我有什么版本的Python?


73

如何找出我拥有的Python版本?

我正在使用Ubuntu 14.04(Trusty Tahr)。


4
另外,查看安装了哪些python二进制文件的快速方法是:ls /usr/bin | grep python
Tejas Kale 2014年

1
@TejasKale更好地运行ls /usr/bin/python*(或者ls /usr/bin/*python*如果您确实想要名称中带有python 任何位置的文件)。这样,ls仍然可以格式化终端的输出(您将获得多列,并使用lsUbuntu中的默认别名进行着色)。
伊莱亚·卡根

Answers:


86

您可以使用python -V(等)向您显示该python命令解析的Python版本。如果这就是您所需要的,那就完成了。但是要查看系统中每个版本的python都需要花费更多时间。

在Ubuntu中,我们可以使用来检查分辨率readlink -f $(which python)。在14.04中的默认情况下,它只会指向/usr/bin/python2.7

我们可以将其链接起来以显示该Python版本的版本:

$ readlink -f $(which python) | xargs -I % sh -c 'echo -n "%: "; % -V'
/usr/bin/python2.7: Python 2.7.6

但这仍然只能告诉我们当前的python解决方案是什么。如果我们在Virtualenv(通用的Python堆栈管理系统)中,则python可能会解析为其他版本:

$ readlink -f $(which python) | xargs -I % sh -c 'echo -n "%: "; % -V'
/home/oli/venv/bin/python: Python 2.7.4

这是真实的输出。

事实是,您的系统中可能存在数百种不同版本的Python,这些Python版本要么是上下文关联的路径,要么是使用不同的二进制名称(例如python3)。

如果我们假设总是要调用Python二进制python<something>文件并将其作为二进制文件,则可以在整个系统中搜索符合以下条件的文件:

$ sudo find / -type f -executable -iname 'python*' -exec file -i '{}' \; | awk -F: '/x-executable; charset=binary/ {print $1}' | xargs readlink -f | sort -u | xargs -I % sh -c 'echo -n "%: "; % -V'
/home/oli/venv/bin/python: Python 2.7.4
/media/ned/websites/venvold/bin/python: Python 2.7.4
/srv/chroot/precise_i386/usr/bin/python2.7: Python 2.7.3
/srv/chroot/trusty_i386/usr/bin/python2.7: Python 2.7.6
/srv/chroot/trusty_i386/usr/bin/python3.4: Python 3.4.0
/srv/chroot/trusty_i386/usr/bin/python3.4m: Python 3.4.0
/usr/bin/python2.7: Python 2.7.6
/usr/bin/python2.7-dbg: Python 2.7.6
/usr/bin/python3.4: Python 3.4.0
/usr/bin/python3.4dm: Python 3.4.0
/usr/bin/python3.4m: Python 3.4.0
/web/venvold/bin/python: Python 2.7.4

这显然是一个非常可怕的命令,但这又是真实的输出,并且似乎做得相当透彻。


我得到以下信息,但我不确定这意味着什么: readlink: extra operand '/usr/bin/python2.7' Try 'readlink --help' for more information.
hello_there_andy

我以为python -v会返回该版本并以root身份执行。它打印出一长串的东西,但在顶部说installing zipimport hook了这句话,现在好像我在一个程序中,我不知道该如何退出,更不用说卸载了吗?您能帮我吗
BugWhisperer '17

2
@Anthony -V版本标记区分大小写。python -v将您置于启用了详细消息的Python控制台中。Control + D滚蛋。或写exit()并按回车键。
奥利(Oli)

@hello_there_andy我想您在复制命令时输入了错字。
wjandrea

63

在终端(Ctrl+ Alt+ T)中输入以下内容:

python -V

要么

python --version

您可以通过键入命令找到在终端许多命令选项/参数列表后跟--help

例:

python --help

手动/手册页也可用于大多数这样的CLI可通过被显示man <command>(例如:man python

来自man python

COMMAND LINE OPTIONS
        -V ,  --version
              Prints the Python version number of the executable and exits.

python3许多计算机上还安装了该软件,因此您可以执行以下操作:

python3 --version

找出您正在运行的python3.x。


2
值得注意的是,下面的@Florian Diesch暗示您可能有多个版本的“ python”。默认的“ python”调用指向python 2.7的安装,尽管ubuntu 14.04也随python 3.0一起提供。
米奇2014年

32
python --version

python2 --version

显示Python 2.x的版本,

python3 --version

安装的Python 3.x版本


8

python在终端中运行时,它将产生如下输出:

Python 2.7.6 (default, Mar 22 2014, 22:59:56) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 

参见第一行- Python 2.7.6

也跑python3。我有3.4.1

Python 3.4.1 (default, Jul 31 2014, 12:46:17) 
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>

但是,这不会显示所有内容。如果您有2个或更多python 3.Xx版本,则只会看到最新版本。

默认情况下在14.04上,您有2.7.6和3.4.0。如您所见,我已更新为3.4.1。我知道我仍然有3.4.0,因为当我转到时,/usr/bin我看到了python3.4,如果我/usr/bin/python3.4在命令行中运行,我会得到3.4.0,而运行/usr/local/bin/python3.4给了我3.4.1。

我的代词是他/他


“如果您有2个或更多python 3.Xx版本,则只会看到最新的版本。” 它是否会显示PATH环境变量中首先列出其包含目录的目录?为什么运行python3总是运行已安装的python3 的最高(子)版本?或者,实际上,它是否不显示/usr/bin/python3符号链接指向的任何版本,而不必是最新版本?
伊利亚·卡根

@Eliah不知道,但是有些程序从那里接走,而其他程序则从那里接走/usr/bin……
Tim

2
好了,当涉及到实际运行的python程序时,取决于它们的运行方式,可以使用hashbang行来确定哪个python充当解释器(详细信息;还请注意env在hashbang行中使用来查找可能是系统解释的那个程序) - 在Python脚本中是常见的首选)。我不确定这是否就是某些程序与其他程序之间的差异所表示的意思。
伊利亚·卡根

不,用户说空闲运行3.4.0,命令行运行3.4.1 ...
2014年

5

您还可以使用platform标准库中的模块从代码本身检查Python版本。有两个函数:(platform.python_version()返回字符串)和platform.python_version_tuple()(返回元组)。脚本:

import platform

print(platform.python_version())
print(platform.python_version_tuple())

运行:

$ python test.py 
3.4.1
('3', '4', '1')
$ python2.7 test.py 
2.7.8
('2', '7', '8')

3
我认为使用sys.version或更常见sys.version_info
Matt Nordhoff 2014年

5

如果要查看所有可用的Python版本作为命令,请运行compgen -c python。例如:

$ compgen -c python
python2.7
python3.4m
python3.4
python3m
python
python3
python2

如果要获取上述每个版本的版本,请使用以下代码:

$ for p in $(compgen -c python); do printf "%-16s" $p; $p --version; done
python2.7      Python 2.7.6
python3.4m     Python 3.4.3
python3.4      Python 3.4.3
python3m       Python 3.4.3
python         Python 2.7.6
python3        Python 3.4.3
python2        Python 2.7.6

更新: python*-config

我注意到python*-config程序不支持该--version标志。例如:

$ python3-config --version
Usage: /usr/bin/python3-config --prefix|--exec-prefix|--includes|--libs|--cflags|--ldflags|--extension-suffix|--help|--abiflags|--configdir

因此,您可以使用过滤掉它们grep -v,例如:

compgen -c python | grep -v -- '-config$'

我猜这应该是最好的答案。
所罗门·维马尔

2

轻松地打开终端,然后执行以下操作:

python

验证您的2.x版本对于我来说,它将出现:

Python 2.7.6 (default, Mar 22 2014, 22:59:56) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.

对于3.x,请输入:

python3

就我而言,它显示为:

Python 3.4.0 (default, Apr 11 2014, 13:05:11) 
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.

对于这两种情况,要摆脱Python shell,请编写:

 exit()

1
  • 外壳端子

    $ which -a python列出所有python

    $ which -a python2.7列出所有python2.7

    $ /usr/bin/python -V提供有关的版本信息/usr/bin/python

  • 签入python脚本

这是ipython shell中的一个例子:

In [1]: import sys

In [2]: sys.version
2.7.11 |Anaconda 2.5.0 (64-bit)| (default, Dec  6 2015, 18:08:32) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]

In [3]: sys.version_info
sys.version_info(major=2, minor=7, micro=11, releaselevel='final', serial=0)

In [4]: sys.version_info >= (2,7)
Out[4]: True

In [5]: sys.version_info >= (3,)
Out[5]: False

我以为python -v会返回该版本并以root身份执行。它打印出一长串的东西,但在顶部说installing zipimport hook了这句话,现在好像我在一个程序中,我不知道该如何退出,更不用说卸载了吗?您能帮我吗
BugWhisperer '17
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.