人们为什么在Python脚本的第一行上编写#!/ usr / bin / env python shebang?
作者:互联网
在我看来,如果没有该行,文件运行相同。
#1楼
您可以使用virtualenv尝试此问题
这是test.py
#! /usr/bin/env python
import sys
print(sys.version)
创建虚拟环境
virtualenv test2.6 -p /usr/bin/python2.6
virtualenv test2.7 -p /usr/bin/python2.7
激活每个环境,然后检查差异
echo $PATH
./test.py
#2楼
强调大多数人错过的一件事可能是有道理的,这可能会阻止立即理解。 在终端中键入python
,通常不会提供完整路径。 而是在PATH
环境变量中查找可执行文件。 反过来,当您想直接执行Python程序/path/to/app.py
,必须告诉Shell使用什么解释器(通过hashbang ,上面其他贡献者在解释什么)。
Hashbang希望有完整的口译员。 因此,要直接运行Python程序,您必须提供Python二进制文件的完整路径,该路径有很大差异,尤其是考虑到使用virtualenv时 。 为了解决可移植性,使用了/usr/bin/env
的技巧。 后者最初旨在就地更改环境并在其中运行命令。 如果未提供任何更改,它将在当前环境中运行该命令,从而有效地导致相同的PATH
查找。
来自unix stackexchange的来源
#3楼
那就是shebang线 。 如Wikipedia条目所述 :
在计算中,“ shebang”(也称为“ hashbang”,“ hashhpling”,“ bang bang”或“ crunchbang”)是指字符“#!”。 当它们是解释器指令中的前两个字符时(作为文本文件的第一行)。 在类似Unix的操作系统中,程序加载器将这两个字符的存在指示为文件是脚本,并尝试使用文件中第一行其余部分指定的解释器执行该脚本。
另请参见Unix FAQ条目 。
即使在Windows上,shebang行不能确定要运行的解释程序,您也可以通过在shebang行上指定选项来将选项传递给解释程序。 我发现将通用的shebang行保留在一次性脚本中(例如我在回答SO问题时编写的脚本)非常有用,因此我可以在Windows和ArchLinux上快速对其进行测试。
使用env实用程序可以在路径上调用命令:
剩下的第一个参数指定要调用的程序名称; 根据
PATH
环境变量进行搜索。 任何剩余的参数将作为参数传递给该程序。
#4楼
如果安装了多个版本的Python,则/usr/bin/env
将确保使用的解释器是环境的$PATH
的第一个解释器。 另一种方法是对#!/usr/bin/python
类的东西进行硬编码; 可以,但是不太灵活。
在Unix中,要解释的可执行文件可以通过#!
来指示要使用的解释器#!
在第一行的开头,接着是解释器(及其可能需要的所有标志)。
当然,如果您在谈论其他平台,则此规则不适用(但“ shebang行”没有害处,并且如果您将该脚本复制到具有 Unix基础的平台(例如Linux,Mac),将有帮助等)。
#5楼
这是一个Shell约定,它告诉Shell哪个程序可以执行脚本。
#!/usr/bin/env python
解析为Python二进制文件的路径。
来源:http://www.1994july.club/seo/?p=1675
标签:bin,解释器,shebang,Python,python,usr,env 来源: https://www.cnblogs.com/1994jinnan/p/12038576.html