协慌网

登录 贡献 社区

我应该放#! (shebang)在 Python 脚本中,它应该采用什么形式?

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

#!/usr/bin/env python

要么

#!/usr/local/bin/python

这些同样便携吗?最常使用哪种形式?

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

答案

任何脚本中的 shebang 行都决定了脚本的执行能力,就像独立的可执行文件一样,无需事先在终端中键入python或在文件管理器中双击它(如果配置正确)。不必要,但通常放在那里,因此当有人看到在编辑器中打开文件时,他们会立即知道他们在看什么。但是,您使用的家当线非常重要的。

Python 3 脚本的正确用法是:

#!/usr/bin/env python3

默认为版本 3.latest。对于 Python 2.7.latest,请使用python2代替python3

不应使用以下内容(除了极少数情况下,您正在编写与 Python 2.x 和 3.x 兼容的代码):

#!/usr/bin/env python

PEP 394 中给出这些建议的原因是python可以在不同系统上引用python2python3 。目前,在大多数发行版中都使用python2 ,但这在某些时候可能会改变。

另外,请勿使用:

#!/usr/local/bin/python

“在这种情况下,python 可能安装在 / usr / bin / python 或 / bin / python 上,以上#!将失败。”

- “#!/ usr / bin / env python” 与 “#!/ usr / local / bin / python”

这实际上只是一个品味问题。添加 shebang 意味着人们可以根据需要直接调用脚本(假设它被标记为可执行文件);省略它只是意味着python必须手动调用。

无论哪种方式,运行该程序的最终结果都不会受到影响。这只是手段的选择。

我应该把 shebang 放在我的 Python 脚本中吗?

将 shebang 放入 Python 脚本中以指示:

  • 该模块可以作为脚本运行
  • 它只能在 python2,python3 上运行还是与 Python 2/3 兼容?
  • 在 POSIX 上,如果要直接运行脚本而不显式调用python可执行文件,则很有必要

这些同样便携吗?最常使用哪种形式?

如果您手动编写 shebang ,请始终使用#!/usr/bin/env python除非有特殊原因不使用它。即使在 Windows(Python 启动器)上也可以理解这种形式。

注意: 已安装的脚本应使用特定的 python 可执行文件,例如/usr/bin/python/home/me/.virtualenvs/project/bin/python 。如果您在 Shell 中激活 virtualenv,如果某些工具损坏了,那就很糟糕。幸运的是,在大多数情况下,由setuptools或分发包工具自动创建正确的 shebang(在 Windows 上, setuptools可以自动生成 wrapper .exe脚本)。

换句话说,如果脚本在源签出中,那么您可能会看到#!/usr/bin/env python 。如果已安装,则 shebang 是特定 python 可执行文件的路径,例如#!/usr/local/bin/python (注意:您不应手动编写来自后一类别的路径)。

要选择是否在 shebang 中使用pythonpython2python3 ,请参阅PEP 394-Unix-like Systems 上的 “python” 命令

  • ... python应该仅在 shebang 行中用于与 Python 2 和 3 源兼容的脚本。

  • 为了准备最终更改默认版本的 Python,应该将仅 Python 2 的脚本更新为与 Python 3 源兼容,或者在 shebang 行中使用python2