我应该把shebang放在我的Python脚本中吗?以什么形式?

#!/usr/bin/env python 

or

#!/usr/local/bin/python

它们同样便携吗?哪种形式使用最多?

注意:龙卷风项目使用shebang。另一方面,Django项目没有。


当前回答

使用第一个

which python

这将给出输出作为python解释器(二进制)存在的位置。

这个输出可以是任意的

/usr/bin/python

or

/bin/python

现在适当地选择shebang线并使用它。

我们可以用:

#!/usr/bin/env

or

#!/bin/env

其他回答

答:只有当您计划使它成为一个命令行可执行脚本时。

步骤如下:

首先验证要使用的正确的shebang字符串:

which python

从中获取输出并将其添加到第一行中(使用shebang #!)。

在我的系统上,它的反应如下:

$which python
/usr/bin/python

所以你的shebang看起来像这样:

#!/usr/bin/python

保存后,它仍然会像以前一样运行,因为python会将第一行视为注释。

python filename.py

为了使它成为一个命令,复制它以删除.py扩展名。

cp filename.py filename

告诉文件系统这将是可执行的:

chmod +x filename

要测试它,使用:

./filename

最好的做法是将它移动到你的$PATH中的某个地方,这样你只需要输入文件名本身。

sudo cp filename /usr/sbin

这样它就可以在任何地方工作(在文件名之前没有。/)

当我最近在Windows 7上安装Python 3.6.1时,它还安装了Windows的Python启动器,它应该处理shebang行。然而,我发现Python启动器没有这样做:shebang行被忽略,并且总是使用Python 2.7.13(除非我使用py -3执行脚本)。

为了解决这个问题,我必须编辑Windows注册表键HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Python.File\shell\open\命令。这仍然有价值

"C:\Python27\python.exe" "%1" %*

从我之前的Python 2.7安装。我将这个注册表项值修改为

"C:\Windows\py.exe" "%1" %*

Python Launcher shebang行处理工作如上所述。

这实际上是一个关于Python解释器的路径应该是绝对路径还是逻辑路径(/usr/bin/env)的问题,考虑到可移植性。

在彻底测试该行为后,我的观点是she-bang中的逻辑路径是两个选项中更好的。

作为一名Linux工程师,我的目标始终是为我的开发人员客户提供最合适的、优化的主机,所以Python环境的问题是我真的需要一个可靠的答案。遇到其他关于这个问题的答案和其他Stack Overflow网站的答案都是泛泛地谈论这个问题,但没有支持证明,我在Unix.SE上对这个问题进行了一些非常细粒度的测试和分析。

对于想要从命令行执行的文件,我建议使用

#! /usr/bin/env python3

否则你就不需要shebang了(当然这也没什么坏处)。

如果你想让你的文件可执行,你必须在你的脚本中添加shebang line。

#!/usr/bin/env python3 

这是更好的选择,因为这将不依赖于特定的Linux发行版,但可以用于几乎所有的Linux发行版,因为它从环境变量中寻找python3路径,这对于不同的Linux发行版是不同的。

#!/usr/local/bin/python3 

将是python3的发行版特定路径,如果python3不在此路径上,将无法工作,并且可能导致开发人员从一个发行版迁移到另一个linux发行版时的混乱和模糊。