我应该在Python脚本中添加#!(shebang)吗?格式应该是什么?
15 个回答
我应该在我的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中使用python
、python2
还是python3
,请查看PEP 394 - Unix类系统上的"python"命令:
...
python
应该只在与Python 2和3都兼容的脚本的shebang行中使用。为了准备将来Python默认版本的变化,Python 2的脚本应该更新为与Python 3兼容,或者在shebang行中使用
python2
。
这其实就是个人喜好的问题。加上 shebang(那种以 #! 开头的行)意味着人们可以直接运行这个脚本(前提是它被标记为可执行的);如果不加的话,就需要手动输入 python
来运行它。
无论哪种方式,运行程序的最终结果都是一样的;这只是选择不同的执行方式而已。
脚本中的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
在不同的系统上可能指向python2
或python3
。
另外,也不要使用:
#!/usr/local/bin/python
"在某些情况下,python可能安装在/usr/bin/python或/bin/python,这样的话,上面的#!就会失败。"