Ale*_*lli 66

如果你很容易在你的PATH上的各种有趣的地方安装python(就像在$PATH典型的Unix shell中那样,%PATH在典型的Windows上),使用/usr/bin/env将容纳你的心血来潮(好吧,至少在类似Unix的环境中)直接到/usr/bin/python惯于.但是失去对你的脚本运行的Python版本的控制并不是没有合法的讨价还价...如果你看看我的代码你更有可能看到它开始,例如,#!/usr/local/bin/python2.5而不是开放和接受#!/usr/bin/env python- 假设脚本很重要我喜欢确保它与我测试过的特定版本一起运行,而不是半随机的版本;-).

  • 当然,你总是可以使用#!/ usr/bin/env python2.5来约束半随机选择的集合:=) (39认同)
  • -1有几个原因:/ usr/local/bin不是python的标准路径,只适用于*本地编译的安装*; 在shebang执行小版本是一个坏主意:可以防止2.4,但它也声称你的脚本*与2.6或2.7*不兼容.次要版本限制是distutils/setup.py,包管理系统或条件导入的任务,*not*shebang; 另外,正如@Ned所说,如果系统没有提供路径或者阻止用户在〜/ bin中使用python 2.5,则不应该对其进行硬编码.**因此,未来的可靠性和糟糕的可移植性.** (15认同)
  • +1使用"env python"来证明NOT的合理性.让我意识到,如果我想使用"env python",我最好编写最低的公分母,因为我无法控制用户在PATH中首先使用的python版本. (3认同)
  • 还要注意使用`#!/ usr/bin/env python`和virtualenvs将在当前的venv中执行脚本!这可能是也可能不是好事,取决于您的使用案例. (3认同)

S.L*_*ott 25

来自维基百科

Shebangs指定系统可执行文件的绝对路径; 这可能会导致具有非标准文件系统布局的系统出现问题

通常,程序/ usr/bin/env可用于规避此限制


Cha*_* Ma 10

它在您的环境中找到python可执行文件并使用它.它更具可移植性,因为python可能并不总是在/ usr/bin/python中.env始终位于/ usr/bin中.


Dir*_*tel 5

它在/ usr/local/bin,〜/ bin,/ opt/bin,......或者它可能隐藏的任何地方找到'python'.

  • 这有点误导.它只能在你当前的$ PATH上找到第一个"python",OS X上的Python实例可以很好地隐藏.特别是,标准框架是从python.org构建的,其他标准框架在框架内有"bin"子目录,其中存储了"python"和其他可执行文件和脚本.很容易最终得到多个实例,这些实例在通常的地方可能有也可能没有符号链接,例如/ usr/local/bin等.在这种情况下,在OS X上管理$ PATH并不像没有框架式构建的系统那样简单. (3认同)
  • @KennethReitz:如果`/ usr/bin/env`不存在,那么你的系统就坏了.`env`是POSIX标准所必需的工具. (2认同)