Python shebang线[重复]
Posted
技术标签:
【中文标题】Python shebang线[重复]【英文标题】:Python shebang line [duplicate] 【发布时间】:2018-11-05 21:32:37 【问题描述】:我见过一些人在 env 之后用空格写他们的 shebang 行。 例如。
#!/usr/bin/env python
这是笔误吗?
我从不使用空格。我用
#!/usr/bin/env/python
有人可以澄清一下吗?
【问题讨论】:
我相信它使 shebang 可以跨不同的操作系统移植。这是一个骗子,给我一秒钟找到它。 具体:***.com/a/6769343/3483203 这两者有什么区别? shebang#!/usr/bin/env/python
是否有一个*nix 系统可以工作?
我不确定我是否同意你链接的骗局,因为我不清楚这个问题是关于一般的 shebangs 还是关于 /usr/bin/env
的 shebangs。我看不清楚。
【参考方案1】:
不,这不是错字!您正在使用的那个不适用于所有操作系统。例如。在我的 Ubuntu Linux 实现中,'env' 是 /usr/bin 中的程序,而不是目录,所以 #!/usr/bin/env/python 不起作用。
【讨论】:
【参考方案2】:不使用空格不是错别字,但在不同机器上执行相同文件时会导致可移植性问题。 shebang 行 (#!/usr....
) 的目的是指示在执行文件中的代码时要使用什么解释器。根据Wikipedia:
shebang解释器指令的格式如下:
#!interpreter [optional-arg]
其中解释器是可执行程序的绝对路径。可选参数是表示单个参数的字符串。
您提供的示例#!/usr/bin/env python
实际上向shell 表明执行文件时要使用的解释器是用户路径中存在的第一个python 解释器。 shebang 行这样写到ensure portability:
Shebangs 必须指定系统可执行文件的绝对路径(或相对于当前工作目录的路径);这可能会导致具有非标准文件系统布局的系统出现问题。即使系统具有相当标准的路径,同一操作系统的变体也很可能具有所需解释器的不同位置。例如,Python 可能位于 /usr/bin/python、/usr/local/bin/python 中,如果由普通用户安装,甚至可能位于 /home/username/bin/python 中。
因此,有时需要在将脚本从一台计算机复制到另一台计算机后编辑 shebang 行,因为编码到脚本中的路径可能不适用于新计算机,这取决于过去放置约定的一致性的解释器。出于这个原因,并且因为 POSIX 没有标准化路径名,POSIX 也没有标准化该功能。
通常,程序 /usr/bin/env 可用于通过引入间接级别来规避此限制。 #!后面是 /usr/bin/env,后面是没有完整路径的所需命令,如下例所示:
#!/usr/bin/env sh
【讨论】:
以上是关于Python shebang线[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Shebang Line (Python 虚拟环境)