我在Python文件的顶部看到了这些:
#!/usr/bin/env python
#!/usr/bin/env python3
在我看来,没有这一行,文件运行是一样的。
我在Python文件的顶部看到了这些:
#!/usr/bin/env python
#!/usr/bin/env python3
在我看来,没有这一行,文件运行是一样的。
当前回答
如果安装了多个版本的Python, /usr/bin/env将确保使用的解释器是环境$PATH中的第一个解释器。另一种方法是硬编码类似#!/usr/bin/python;这是可以的,但是不太灵活。
在Unix中,要解释的可执行文件可以通过#!在第一行的开头,后面跟着解释器(以及它可能需要的任何标志)。
如果您谈论的是其他平台,当然,这条规则不适用(但“shebang行”没有害处,如果您将该脚本复制到基于Unix的平台,如Linux、Mac等,则会有所帮助)。
其他回答
为了运行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即可。
这被称为shebang线。维基百科词条解释道:
在计算中,shebang(也称为hashbang、hashpling、pound bang或crunchbang)指的是字符“#!”,当它们是解释器指令中作为文本文件第一行的前两个字符时。在类unix操作系统中,程序加载器将出现这两个字符作为文件是脚本的指示,并尝试使用文件中第一行剩余部分指定的解释器执行该脚本。
请参见Unix FAQ条目。
即使在Windows上,shebang行不决定要运行的解释器,您也可以通过在shebang行上指定选项来将选项传递给解释器。我发现在一次性脚本中保留一个通用的shebang行很有用(比如我在回答SO问题时写的脚本),这样我就可以在Windows和ArchLinux上快速测试它们。
env实用程序允许你在路径上调用命令:
剩下的第一个参数指定要调用的程序名称;它根据PATH环境变量进行搜索。其余的参数将作为参数传递给该程序。
扩展一下其他的答案,这里有一个小例子,说明你的命令行脚本会因为不小心使用/usr/bin/env shebang行而陷入麻烦:
$ /usr/local/bin/python -V
Python 2.6.4
$ /usr/bin/python -V
Python 2.5.1
$ cat my_script.py
#!/usr/bin/env python
import json
print "hello, json"
$ PATH=/usr/local/bin:/usr/bin
$ ./my_script.py
hello, json
$ PATH=/usr/bin:/usr/local/bin
$ ./my_script.py
Traceback (most recent call last):
File "./my_script.py", line 2, in <module>
import json
ImportError: No module named json
json模块在Python 2.5中不存在。
防止这类问题的一种方法是使用通常与大多数python一起安装的版本化python命令名:
$ cat my_script.py
#!/usr/bin/env python2.6
import json
print "hello, json"
如果你只需要区分Python 2。3. Python。x,最近发布的Python 3也提供了一个python3名称:
$ cat my_script.py
#!/usr/bin/env python3
import json
print("hello, json")
这告诉脚本python目录在哪里!
#! /usr/bin/env python