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

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

在我看来,没有这一行,文件运行是一样的。


当前回答

在我看来,没有这一行,文件运行是一样的。

如果是这样,那么也许你是在Windows上运行Python程序?Windows不使用这一行——相反,它使用file-name扩展名来运行与文件扩展名相关的程序。

然而,在2011年,一个“Python启动器”被开发出来,它(在某种程度上)在Windows上模仿了Linux的这种行为。这仅限于选择运行哪个Python解释器——例如,在安装了Python 2和Python 3的系统中选择Python 2和Python 3。在Python安装时,启动器可选地作为py.exe安装,并且可以与.py文件相关联,以便启动器将检查这一行,然后启动指定的Python解释器版本。

其他回答

技术上讲,在Python中,这只是一个注释行。

这一行只在从shell(从命令行)运行py脚本时使用。这就是所谓的“Shebang!”,它被用于各种情况,而不仅仅是Python脚本。

在这里,它指示shell启动特定版本的Python(以处理文件的其余部分)。

这被称为shebang线。维基百科词条解释道:

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

请参见Unix FAQ条目。

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

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

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

也许你的问题是这样的:

如果你想使用:$python myscript.py

你根本不需要那句台词。系统将调用python,然后python解释器将运行您的脚本。

但如果你打算使用:$./myscript.py

像普通程序或bash脚本一样直接调用它,您需要编写这一行来指定系统使用哪个程序来运行它(并使其可执行chmod 755)

它只是指定要使用的解释器。为了理解这一点,通过touch test.py创建一个文件,然后在该文件中输入以下内容:

#!/usr/bin/env python3
print "test"

执行chmod +x test.py使脚本可执行。在此之后,当你执行./test.py时,你应该得到一个错误:

  File "./test.py", line 2
    print "test"
               ^
SyntaxError: Missing parentheses in call to 'print'

因为python3不支持打印操作符。

现在继续,将代码的第一行更改为:

#!/usr/bin/env python2

将test打印到stdout是可行的,因为python2支持打印操作符。现在,您已经了解了如何在脚本解释器之间切换。

行#!/bin/bash/python3或#!/bin/bash/python指定要使用的python编译器。你可能安装了多个python版本。例如, a.py:

#!/bin/bash/python3
print("Hello World")

是python3脚本,和 b.py:

#!/bin/bash/python
print "Hello World"

是一条巨蟒。x脚本 为了运行这个文件。/a.py或。/b.py,你需要预先赋予文件执行权限,否则执行会导致Permission denied错误。 给予执行许可,

chmod +x a.py