我应该把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项目没有。
当前回答
如果你有多个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发行版时的混乱和模糊。
这实际上是一个关于Python解释器的路径应该是绝对路径还是逻辑路径(/usr/bin/env)的问题,考虑到可移植性。
在彻底测试该行为后,我的观点是she-bang中的逻辑路径是两个选项中更好的。
作为一名Linux工程师,我的目标始终是为我的开发人员客户提供最合适的、优化的主机,所以Python环境的问题是我真的需要一个可靠的答案。遇到其他关于这个问题的答案和其他Stack Overflow网站的答案都是泛泛地谈论这个问题,但没有支持证明,我在Unix.SE上对这个问题进行了一些非常细粒度的测试和分析。
当我最近在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行处理工作如上所述。
对于想要从命令行执行的文件,我建议使用
#! /usr/bin/env python3
否则你就不需要shebang了(当然这也没什么坏处)。
如果你有多个Python版本,并且脚本需要在特定版本下运行,she-bang可以确保在直接执行脚本时使用正确的版本,例如:
#!/usr/bin/python2.7
注意,脚本仍然可以通过完整的Python命令行运行,或者通过导入运行,在这种情况下,she-bang将被忽略。但是对于直接运行的脚本,这是使用she-bang的一个很好的理由。
# !/usr/bin/env python通常是更好的方法,但在特殊情况下会有所帮助。
通常情况下,最好建立一个Python虚拟环境,在这种情况下,泛型#!/usr/bin/env python将为virtualenv识别正确的python实例。