我应该把shebang放在我的Python脚本中吗?以什么形式?
#!/usr/bin/env python
or
#!/usr/local/bin/python
它们同样便携吗?哪种形式使用最多?
注意:龙卷风项目使用shebang。另一方面,Django项目没有。
我应该把shebang放在我的Python脚本中吗?以什么形式?
#!/usr/bin/env python
or
#!/usr/local/bin/python
它们同样便携吗?哪种形式使用最多?
注意:龙卷风项目使用shebang。另一方面,Django项目没有。
当前回答
这只是个人口味的问题。添加shebang意味着人们可以直接调用脚本(假设它被标记为可执行);省略它只意味着必须手动调用python。
运行程序的最终结果不会受到任何影响;这只是手段的选择。
其他回答
我应该把shebang放在我的Python脚本中吗?
在Python脚本中输入shebang表示:
该模块可以作为脚本运行 它是否只能在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,那么某些工具会坏掉,这是很糟糕的。幸运的是,在大多数情况下,正确的shebang是由setuptools或您的分发包工具自动创建的(在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, python2的脚本应该更新为源代码 兼容python3或者在shebang行中使用python2。
任何脚本中的shebang行决定了脚本是否能够像独立可执行文件一样执行,而无需事先在终端中键入python或在文件管理器中双击它(在配置正确的情况下)。它不是必需的,但通常放在那里,这样当有人看到在编辑器中打开的文件时,他们立即知道他们在看什么。但是,你用哪条线是很重要的。
Python 3脚本(默认为版本3.latest)的正确用法是:
#!/usr/bin/env python3
Python 2脚本(默认为版本2.latest)的正确用法是:
#!/usr/bin/env python2
不应该使用以下代码(除非你编写的代码与Python 2兼容,这种情况很少见)。X和3.x):
#!/usr/bin/env python
PEP 394中给出这些建议的原因是,python可以在不同的系统上引用python2或python3。
此外,不要使用:
#!/usr/local/bin/python
python可以安装在/usr/bin/python或/bin/python 案例,以上#!将会失败。”
——“# !/usr/bin/env python“vs”!/ usr / local / bin / python)”
如果脚本是可执行的,则应该添加shebang。您还应该使用安装软件来安装脚本,该安装软件将shebang修改为正确的内容,以便它能够在目标平台上工作。distutils和Distribute就是这样的例子。
如果你有多个Python版本,并且脚本需要在特定版本下运行,she-bang可以确保在直接执行脚本时使用正确的版本,例如:
#!/usr/bin/python2.7
注意,脚本仍然可以通过完整的Python命令行运行,或者通过导入运行,在这种情况下,she-bang将被忽略。但是对于直接运行的脚本,这是使用she-bang的一个很好的理由。
# !/usr/bin/env python通常是更好的方法,但在特殊情况下会有所帮助。
通常情况下,最好建立一个Python虚拟环境,在这种情况下,泛型#!/usr/bin/env python将为virtualenv识别正确的python实例。
当我最近在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行处理工作如上所述。