为什么人们在Python脚本的第一行写#!/usr/bin/env python?

2022-09-05 01:02:32

我在Python文件的顶部看到这些:

#!/usr/bin/env python
#!/usr/bin/env python3

在我看来,如果没有那行,文件运行起来是一样的。


答案 1

如果您安装了多个版本的Python,将确保使用的解释器是您环境中的第一个版本。另一种方法是硬编码类似 ;没关系,但不太灵活。/usr/bin/env$PATH#!/usr/bin/python

在Unix中,要解释的可执行文件可以通过在第一行的开头有一个来指示要使用的解释器,然后是解释器(以及它可能需要的任何标志)。#!

当然,如果你在谈论其他平台,这个规则不适用(但是“shebang line”没有害处,如果你将该脚本复制到具有Unix基础平台,如Linux,Mac等),这将有所帮助)。


答案 2

这被称为shebang线。正如维基百科条目所解释的那样

在计算中,shebang(也称为hashbang,hashpling,pound bang或crunchbang)是指字符“#!”,当它们是解释器指令中的前两个字符时,它们是文本文件的第一行。在类Unix操作系统中,程序加载程序将这两个字符的存在作为文件是脚本的指示,并尝试使用文件中第一行的其余部分指定的解释器来执行该脚本。

另请参阅 Unix FAQ 条目

即使在 Windows 上,shebang 行不能确定要运行的解释器,也可以通过在 shebang 行上指定选项来将选项传递给解释器。我发现在一次性脚本中保留一个通用的shebang行很有用(例如我在回答SO问题时写的脚本),这样我就可以在Windows和ArchLinux上快速测试它们。

env 实用程序允许您在路径上调用命令:

剩下的第一个参数指定要调用的程序名称;根据环境变量进行搜索。任何剩余的参数都将作为参数传递给该程序。PATH