win7 - www python org python




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

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

#!/usr/bin/env python 

要么

#!/usr/local/bin/python

这些是否同样便携? 哪种形式最常用?

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


我应该把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可以自动生成包装器.exe脚本)。

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

要选择是否应该在shebang中使用pythonpython2python3 ,请参阅PEP394

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

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


答案:只有当你打算将它制作成命令行可执行脚本。

程序如下:

首先验证要使用的适当的shebang字符串:

which python

从中取出输出并在第一行添加它(用shebang#!)。

在我的系统上,它的响应如下所示:

$which python
/usr/bin/python

所以你的shebang看起来像:

#!/usr/bin/python

保存后,它仍然会像以前一样运行,因为python会将第一行看作是注释。

python filename.py

要使其成为命令,请将其复制以删除.py扩展名。

cp filename.py filename

告诉文件系统这将是可执行的:

chmod +x filename

要测试它,请使用:

./filename

最佳做法是将其移动到$ PATH中的某处,以便您只需键入文件名即可。

sudo cp filename /usr/sbin

这样它就可以在任何地方工作(没有./在文件名之前)


任何脚本中的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”vs“#!/ usr / local / bin / python”


先使用

which python

这将使输出成为我的python解释器(二进制)所在的位置。

这个输出可以是任何例如

/usr/bin/python

要么

/bin/python

现在适当地选择shebang线并使用它。

为了推广,我们可以使用:

#!/usr/bin/env

要么

#!/bin/env

如果脚本是可执行的,你应该添加一个shebang。 您还应该安装带有安装软件的脚本,该软件可以修改shebang,使其可以在目标平台上正常工作。 这个例子是distutils和Distribute。


当我最近在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\command 。 这仍然有价值

"C:\Python27\python.exe" "%1" %*

来自我早期的Python 2.7安装。 我修改了这个注册表键值

"C:\Windows\py.exe" "%1" %*

并且Python启动器shebang行处理如上所述工作。


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

运行程序的最终结果不会受到任何影响; 这只是手段的选择。





shebang