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中指定的编码(来自模块内)

Python之shebang

Python脚本的正确shebang

如何使用 Shebang Line (Python 虚拟环境)

如何使用 Shebang Line (Python 虚拟环境)

不同版本 Python 的条件 shebang 行