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 而不是硬路径有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Shebang Line (Python 虚拟环境)