我在Python文件的顶部看到了这些:
#!/usr/bin/env python
#!/usr/bin/env python3
在我看来,没有这一行,文件运行是一样的。
我在Python文件的顶部看到了这些:
#!/usr/bin/env python
#!/usr/bin/env python3
在我看来,没有这一行,文件运行是一样的。
当前回答
这告诉脚本python目录在哪里!
#! /usr/bin/env python
其他回答
这告诉脚本python目录在哪里!
#! /usr/bin/env python
它只是指定要使用的解释器。为了理解这一点,通过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支持打印操作符。现在,您已经了解了如何在脚本解释器之间切换。
执行python文件时,可以使用./file.py,其中file是文件的名称。/usr/bin/env是PATH,然后python是python2, python3是python3(胡说)
#!/usr/bin/env python也可以允许python文件被其他程序执行,只要使用chmod +x file.py即可。
技术上讲,在Python中,这只是一个注释行。
这一行只在从shell(从命令行)运行py脚本时使用。这就是所谓的“Shebang!”,它被用于各种情况,而不仅仅是Python脚本。
在这里,它指示shell启动特定版本的Python(以处理文件的其余部分)。
如果你在虚拟环境(比如venv)中运行脚本,那么在venv上执行哪个python将显示python解释器的路径:
~ / env / venv / bin / python
请注意,虚拟环境的名称嵌入在Python解释器的路径中。因此,在脚本中硬编码这个路径会导致两个问题:
如果将脚本上传到存储库,则会强制其他用户使用相同的虚拟环境名称。前提是他们首先发现了问题。 即使在其他虚拟环境中有所有必需的包,也不能跨多个虚拟环境运行脚本。
因此,为乔纳森的回答补充一点,理想的shebang是#!/usr/bin/env python,不仅可以跨操作系统的可移植性,还可以跨虚拟环境的可移植性!