#!/ usr / bin / python和#!/ usr / bin / env python,哪些支持?

Python脚本的shebang应该怎么样?

有些人支持#!/usr/bin/env python因为它可以智能地找到Python解释器。 其他人支持#!/usr/bin/python ,因为现在在大多数GNU / Linux发行版中, python是默认程序。

两种变体有什么好处?


Debian Python政策指出:

Python解释器的首选规范是/usr/bin/python/usr/bin/pythonX.Y 。 这确保了使用Python的Debian安装,并且满足了对附加python模块的所有依赖。

维护者不应该使用/usr/bin/env python/usr/bin/env pythonX.Y覆盖Debian Python解释器。 这是不可取的,因为它绕过了Debian的依赖性检查,并使该软件包易受到python不完整的本地安装的影响。

请注意,Debian / Ubuntu使用替代系统来管理/usr/bin/python实际指向的版本。 至少对我来说,这已经在很多python版本中工作得非常好(我现在已经使用了从2.3到2.7的python),并且在更新中有很好的转换。

请注意, 我从来没有使用过pip 。 我想要自动安全升级,所以我通过aptitude安装我所有的python需求。 使用官方的Debian / Ubuntu软件包让我的系统比我自己的python安装更加干净。


让我强调一件事。 以上建议是指python应用程序的系统安装。 让这些使用系统管理版本的python是非常有意义的。 如果你实际上是在自己定制的安装python而不是由操作系统管理,那么使用env变体可能是说“使用用户首选python”的正确方式,而不是硬编码系统python安装(这将是/usr/bin/python )或任何用户自定义路径。

如果你使用python virtualenv调用它们,使用env python会导致你的程序行为不同。

可能是需要的 (例如,你正在编写一个脚本,只在你的virtualenv中工作)。 它可能会有问题 (你为你写一个工具,并期望它在virtualenv中也能工作 - 它可能会突然失败,因为它会丢失包)。


我的愚见是你应该使用env变体。 这是一个在几乎所有系统中都可以找到的POSIX组件,而直接指定/usr/bin/python会在很多场合中断,即virtualenv设置。


我使用#!/usr/bin/env python作为OS-X上的默认安装位置不是/usr/bin 。 这也适用于喜欢自定义环境的用户 - /usr/local/bin是另一个可以找到python发行版的常见位置。

这就是说,这并不重要。 你可以随时用你想要的任何python版本来测试脚本: /usr/bin/strange/path/python myscript.py 。 另外,当您通过setuptools安装脚本时,shebang似乎被安装该脚本的sys.executable替换 - 我不知道pip ,但我会假设它的行为相似。

链接地址: http://www.djcxy.com/p/46411.html

上一篇: #!/usr/bin/python and #!/usr/bin/env python, which support?

下一篇: Bash script to kill a process if process count is over X amount