python shebangs 与 /usr/bin/env 而不是硬路径有啥区别?

Posted

技术标签:

【中文标题】python shebangs 与 /usr/bin/env 而不是硬路径有啥区别?【英文标题】:What's the difference between python shebangs with /usr/bin/env rather than hard-path?python shebangs 与 /usr/bin/env 而不是硬路径有什么区别? 【发布时间】:2011-08-08 06:04:09 【问题描述】:

我曾经用过shebang

#!/usr/bin/env python

什么时候用比较好

#!/usr/bin/python

它们之间的确切区别是什么?

【问题讨论】:

您尝试man env 看看env 应用程序做了什么吗? Why do people write #!/usr/bin/env python on the first line of a Python script?的可能重复 @S.Lott 我认为env 是一个目录,而不是可执行文件。 Should I put #! (shebang) in Python scripts, and what form should it take?的可能重复 【参考方案1】:

#!/usr/bin/python 被硬编码为始终运行/usr/bin/python,而#!/usr/bin/env python 将运行您当前环境中默认的python(它将考虑例如$PATH,您可以检查哪个python 解释器将与which python 一起使用)。

第二种方式(#!/usr/bin/env python)是首选,因为它不依赖于特定的安装。例如,它适用于virtualenv 设置或没有/usr/bin/python 的系统,但只有例如/usr/local/bin/python.

【讨论】:

这个。见Why do people write #!/usr/bin/env python on the first line of a Python script? 和this message on the Python mailing list。 /usr/bin/python 存在但不是实际可执行文件(例如,它可能是启动脚本)时,通过env 的间接作用也有效 这是否意味着使用#!/usr/bin/env perl 会比通常的shebang #!/bin/perl 更通用?在我看来,人们通常在 perl 中使用#!/bin/perl,但在 python 中使用#!/usr/bin/env python。为什么? @Ken,没有原则性的理由,只是历史的偶然。 @Ken: AFAIK,Perl 没有流行的 virtualenv 等价物。

以上是关于python shebangs 与 /usr/bin/env 而不是硬路径有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

Python脚本的正确shebang

Python shebang线[重复]

如何使用 Shebang Line (Python 虚拟环境)

如何使用 Shebang Line (Python 虚拟环境)

阻止Python在shebang中生成pyc文件[重复]

不同版本 Python 的条件 shebang 行