我想知道我用来在Linux环境中运行某些代码的Python版本。随着时间的流逝,我安装了多个版本,因此,当我从终端运行代码时,我只想检查运行简单代码的版本:
Comparable
当我尝试以下操作时,我会得到不同的答案
$ ./<filename>.py
有人可以让我知道如何确定哪个版本处于活动状态。
谢谢
答案 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>.py
,python ./<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