我应该放#! (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
可以在不同的系统上引用python2
或python3
。 它目前在大多数发行版中引用了python2
,但在某些时候可能会发生变化。
另外,不要使用:
#!/usr/local/bin/python
“在这些情况下,python可能安装在/ usr / bin / python或/ bin / python中,上述#!将会失败。”
- “#!/ usr / bin / env python”vs“#!/ usr / local / bin / python”
这只是一个品味问题。 添加shebang意味着用户可以直接调用脚本(假设它被标记为可执行文件); 省略它只是意味着必须手动调用python
。
运行程序的最终结果不会受到任何影响; 这只是手段的选择。
我应该把shebang放到我的Python脚本中吗?
将一个shebang放入Python脚本中以表明:
python
可执行文件,则这是必要的 这些是否同样便携? 哪种形式最常用?
如果你手动编写了一个shebang,那么总是使用#!/usr/bin/env python
除非你有特定的理由不使用它。 即使在Windows(Python启动器)上也可以理解这种形式。
注意:安装的脚本应该使用特定的python可执行文件,例如/usr/bin/python
或/home/me/.virtualenvs/project/bin/python
。 如果在shell中激活virtualenv,某些工具会中断,这是很糟糕的。 幸运的是,在大多数情况下,通过setuptools
或分发包工具自动创建正确的shebang(在Windows上, setuptools
可以自动生成包装器.exe
脚本)。
换句话说,如果脚本在源代码签出中,那么你可能会看到#!/usr/bin/env python
。 如果已安装,则shebang是特定python可执行文件(如#!/usr/local/bin/python
的路径(注意:不应手动从后一类别中编写路径)。
要选择是否应该在shebang中使用python
, python2
或python3
,请参阅PEP 394 - 类Unix系统上的“python”命令:
... python
应该在shebang行中用于仅与Python 2和3兼容的脚本。
为了准备最终更改Python的默认版本,仅将Python 2的脚本更新为与Python 3的源代码兼容,或者在shebang行中使用python2
。
上一篇: Should I put #! (shebang) in Python scripts, and what form should it take?
下一篇: What is the Python equivalent of static variables inside a function?