我应该把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项目没有。
当前回答
当我最近在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行处理工作如上所述。
其他回答
任何脚本中的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)”
如果你有多个Python版本,并且脚本需要在特定版本下运行,she-bang可以确保在直接执行脚本时使用正确的版本,例如:
#!/usr/bin/python2.7
注意,脚本仍然可以通过完整的Python命令行运行,或者通过导入运行,在这种情况下,she-bang将被忽略。但是对于直接运行的脚本,这是使用she-bang的一个很好的理由。
# !/usr/bin/env python通常是更好的方法,但在特殊情况下会有所帮助。
通常情况下,最好建立一个Python虚拟环境,在这种情况下,泛型#!/usr/bin/env python将为virtualenv识别正确的python实例。
如果你想让你的文件可执行,你必须在你的脚本中添加shebang line。
#!/usr/bin/env python3
这是更好的选择,因为这将不依赖于特定的Linux发行版,但可以用于几乎所有的Linux发行版,因为它从环境变量中寻找python3路径,这对于不同的Linux发行版是不同的。
而
#!/usr/local/bin/python3
将是python3的发行版特定路径,如果python3不在此路径上,将无法工作,并且可能导致开发人员从一个发行版迁移到另一个linux发行版时的混乱和模糊。
当我最近在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行处理工作如上所述。
如果你使用像pyenv这样的虚拟环境,最好写#!/usr/bin/env python pyenv设置将控制python的哪个版本以及从哪个文件位置开始运行脚本。
如果已知您的代码是特定于版本的,那么如果您在shebang中指定了预期的版本,那么它将帮助其他人发现为什么您的脚本在他们的环境中不能正常工作。