我应该在Python脚本中添加#!(shebang)吗?格式应该是什么?

1232 投票
15 回答
871122 浏览
提问于 2025-04-16 22:42

我在写Python脚本的时候,应该加上shebang吗?加成什么样的形式比较好呢?

#!/usr/bin/env python 

或者

#!/usr/local/bin/python

这两种形式在不同的系统上都能用吗?哪种形式更常见呢?

注意: tornado项目是用shebang的,而Django项目则没有。

15 个回答

46

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

在Python脚本中加shebang是为了说明:

  • 这个模块可以作为脚本运行
  • 它是只能在python2上运行,还是只能在python3上运行,或者它兼容Python 2和3
  • 在POSIX系统上,如果你想直接运行脚本而不需要明确调用python,那么加shebang是必须的

这些形式是否一样便携?哪种形式使用得最多?

如果你手动写shebang,建议总是使用#!/usr/bin/env python(或者#!/usr/bin/env python2 / #!/usr/bin/env python3,下面会详细说明),除非你有特别的理由不这样做。这种形式在Windows上也能识别(Python启动器)。

注意:已安装的脚本应该使用特定的python可执行文件,比如/usr/bin/python/home/me/.virtualenvs/project/bin/python。如果你在shell中激活了虚拟环境,有些工具出现问题就不好了。幸运的是,大多数情况下,setuptools或你的发行版包工具会自动生成正确的shebang(在Windows上,setuptools可以自动生成包装的.exe脚本)。

换句话说,如果脚本是在源代码检出中,你可能会看到#!/usr/bin/env python。如果它是已安装的,那么shebang就是指向特定python可执行文件的路径,比如#!/usr/local/bin/python(注意:你不应该手动写后者类别的路径)。

要选择在shebang中使用pythonpython2还是python3,请查看PEP 394 - Unix类系统上的"python"命令

  • ... python应该只在与Python 2和3都兼容的脚本的shebang行中使用。

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

99

这其实就是个人喜好的问题。加上 shebang(那种以 #! 开头的行)意味着人们可以直接运行这个脚本(前提是它被标记为可执行的);如果不加的话,就需要手动输入 python 来运行它。

无论哪种方式,运行程序的最终结果都是一样的;这只是选择不同的执行方式而已。

1663

脚本中的shebang行决定了这个脚本是否可以像独立的可执行文件一样运行,也就是说,你不需要在终端里先输入python,或者在文件管理器里双击它(当然前提是配置正确)。虽然这不是必须的,但通常会加上这个行,这样当有人在编辑器中打开这个文件时,他们能立刻知道这个文件是什么。不过,选择哪个shebang行是很重要的。

对于Python 3脚本(默认使用最新的3.x版本),正确的写法是:

#!/usr/bin/env python3

对于Python 2脚本(默认使用最新的2.x版本),正确的写法是:

#!/usr/bin/env python2

以下不应该使用(除非你在写兼容Python 2.x和3.x的代码,这种情况很少见):

#!/usr/bin/env python

这些建议的原因在于,python在不同的系统上可能指向python2python3

另外,也不要使用:

#!/usr/local/bin/python

"在某些情况下,python可能安装在/usr/bin/python或/bin/python,这样的话,上面的#!就会失败。"

"#!/usr/bin/env python" vs "#!/usr/local/bin/python"

撰写回答