适用于Python脚本的shebang

Ada*_*tan 54 python portability shebang

我通常在我的Python脚本中使用以下shebang声明:

#!/usr/bin/python
Run Code Online (Sandbox Code Playgroud)

最近,我遇到了这个shebang声明:

#!/usr/bin/env python
Run Code Online (Sandbox Code Playgroud)

在脚本文档中,注意到使用此表单"更具可移植性".

这个声明是什么意思?为什么路径中间有空间?它实际上是否有助于稳定性?

jh3*_*314 68

#!/usr/bin/env python
Run Code Online (Sandbox Code Playgroud)

因为一般来说程序/usr/bin/env可以用来"激活"所需的命令而不需要完整的路径.

否则,您必须指定Python解释器的完整路径,这可能会有所不同.

因此,无论Python解释器是在主目录/usr/bin/python/usr/local/bin/python还是在主目录中,使用#!/usr/bin/env python都可以.

  • 如果您的脚本仅是 Python 3,并且您的目标系统在 PATH 中可能有 Python 2 可执行文件,那么我建议改用“#!/usr/bin/env python3”。 (7认同)
  • @AdamMatan env在环境中使用`PATH`变量,查看其中的每个目录以获取给定名称的二进制文件(在本例中为python).如果找到它,它会执行程序.这将程序的发现与执行分离,并且由于`env`在`/ usr/bin`的标准位置的许多系统上都可用,因此它更具可移植性.更好的标准化带来更好的可移植性. (4认同)