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

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

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


当前回答

它告诉解释器,当你有多个版本的python时,使用哪个版本的python运行程序。

其他回答

这是一个shell约定,告诉shell哪个程序可以执行脚本。

#!/usr/bin/env python

解析为Python二进制文件的路径。

为了运行python脚本,我们需要告诉shell三件事:

该文件是一个脚本 我们希望哪个解释器执行脚本 所述解释器的路径

shebang #!完成(1)。shebang以#开头,因为#字符在许多脚本语言中是注释标记。因此,解释器会自动忽略shebang行的内容。

env命令完成(2.)和(3.)。引用“引力”,

env命令的一个常见用法是通过使 使用事实,env将搜索$PATH为它被告知的命令 推出。由于shebang线需要一个绝对路径 指定的,并且由于各种解释器(perl、bash、 Python)可能会有很大的变化,通常使用: #!/usr/bin/env perl,而不是试图猜测是否是 /usr/bin/perl, /usr/local/bin/perl, /usr/local/pkg/perl, /fileserver/usr/bin/perl,或者用户的/home/ mrdaniel /usr/bin/perl 系统…… 另一方面,env几乎总是在/usr/bin/env.中(除了 当它不是的时候;有些系统可能会使用/bin/env,但那是一个 相当罕见的情况,只发生在非linux系统上。)

执行python文件时,可以使用./file.py,其中file是文件的名称。/usr/bin/env是PATH,然后python是python2, python3是python3(胡说)

#!/usr/bin/env python也可以允许python文件被其他程序执行,只要使用chmod +x file.py即可。

这是推荐的方法,在文档中提出:

2.2.2. 可执行Python脚本 在BSD的Unix系统上,可以直接编写Python脚本 可执行,就像shell脚本一样 # !/usr/bin/env python3.2

从http://docs.python.org/py3k/tutorial/interpreter.html executable-python-scripts

强调一件大多数人都忽略了的事情可能是有道理的,这可能会妨碍立即理解。在终端中输入python时,通常不会提供完整路径。相反,可执行文件在PATH环境变量中查找。反过来,当你想直接执行Python程序/path/to/app.py时,必须告诉shell要使用哪个解释器(通过hashbang,其他贡献者在上面解释的内容)。

Hashbang期望到解释器的完整路径。因此,要直接运行你的Python程序,你必须提供Python二进制文件的完整路径,这差异很大,特别是考虑到使用virtualenv。为了解决可移植性,使用了/usr/bin/env的技巧。后者最初的目的是就地改变环境并在其中运行命令。当没有提供任何更改时,它将在当前环境中运行该命令,这将有效地导致相同的PATH查找。

源代码来自unix stackexchange