检查运行我的代码的Python的实际版本

时间:2019-06-30 20:21:06

标签: python shell

我想知道我用来在Linux环境中运行某些代码的Python版本。随着时间的流逝,我安装了多个版本,因此,当我从终端运行代码时,我只想检查运行简单代码的版本:

Comparable

当我尝试以下操作时,我会得到不同的答案

$ ./<filename>.py

有人可以让我知道如何确定哪个版本处于活动状态。

谢谢

2 个答案:

答案 0 :(得分:3)

要视情况而定。

  • 如果像在./<filename>.py中那样直接将其作为可执行文件运行,则它将作为所使用的shebang(脚本第一行中提到的可执行文件)的参数运行;一些非常常见的是#!/bin/bash#!/usr/bin/python#!/usr/bin/env python3等。一种极端的情况是,当您以./<filename>.py的身份运行而未指定任何shebang时;在这种情况下,行为取决于外壳程序-一些外壳程序将作为其自身的参数执行,而某些外壳程序将使用/bin/sh。当心,您不希望您的shell运行您的python脚本,因此始终明确提及在shebang中使用的可执行文件,即使对于shell可执行文件(例如POSIX / non-POSIX功能)

  • 如果您将脚本作为可执行文件的参数运行,则该脚本将由该运行,而不管其是否运行,例如python3 ./<filename>.pypython ./<filename>.py

对于第一种情况,我建议您在说明shebang时,使用env而不是使用硬编码的可执行文件绝对路径,因为env将为您提供可执行文件搜索的完整路径。 PATH,就像在命令行中运行某些内容一样。代替

#!/usr/bin/python3

使用

#!/usr/bin/env python3

将使用路径中的第一个python3。当您在虚拟环境中运行脚本并且想要使用当前虚拟环境中的python版本时,这真的很有帮助。

我还建议您研究PATH环境变量,以了解如何搜索类似python(相对路径)的命令并将其替换为绝对路径。 (这将使您了解python -V为何起作用,即shell如何找到要使用的python。)

类似地,使用shell内置的type,通过遍历PATH来找到可执行的绝对路径。

POSIX:

type python

bash / zsh具有-a参数,以显示与名称匹配的所有位置的可执行文件,而不仅仅是第一个:

type -a python

FWIW,在Python进程中,您可以找到带有sys.version(返回str)或sys.version_info(返回tuple)的解释器版本。

答案 1 :(得分:3)

有几种方法可以检测程序正在使用的python版本。

从您的问题中我得到的感觉是您不理解为什么$ python -V$ /usr/bin/python3 -V返回的版本不同。这仅仅是由于python命令被软链接到特定的二进制版本(在您的情况下是2.7)。

如果您想了解外壳程序上的python命令链接到哪个二进制文件:

$ readlink -f `which python`
/usr/bin/python2.7

通过编程,您可以使用以下命令获取Python版本:

import sys

print(sys.version_info)

这将导致以下输出:

sys.version_info(major=3, minor=6, micro=8, releaselevel='final', serial=0)

您只是想知道通过外壳程序调用时python使用的是哪个版本,您可以通过以下方式轻松找到:

$ python -V
Python 2.7.12

您还可以检查python文件的标头,并在调用脚本时未指定特定python脚本时检查哪个解释器。 (即:$ ./python_file.py

#!/usr/bin/python2.7