我在Python文件的顶部看到了这些:
#!/usr/bin/env python
#!/usr/bin/env python3
在我看来,没有这一行,文件运行是一样的。
我在Python文件的顶部看到了这些:
#!/usr/bin/env python
#!/usr/bin/env python3
在我看来,没有这一行,文件运行是一样的。
当前回答
它告诉解释器,当你有多个版本的python时,使用哪个版本的python运行程序。
其他回答
考虑到python2和python3之间的可移植性问题,您应该始终指定其中一个版本,除非您的程序与两个版本都兼容。
一些发行版现在已经发布了python符号链接到python3 -不要依赖于python是python2。
PEP 394强调了这一点:
为了容忍不同平台的差异,所有的新代码 需要调用Python解释器时不应该指定Python,但是 而是应该指定python2或python3(或更具体的 python2。X和python3。x版本;参见迁移说明)。这 当从shell调用时,应该在shebangs中进行区分 脚本,当通过system()调用调用时,或在任何 其他上下文。
这样做的主要原因是使脚本可跨操作系统环境移植。
例如,在mingw下,python脚本使用:
#!/c/python3k/python
在GNU/Linux发行版下,它是:
#!/usr/local/bin/python
or
#!/usr/bin/python
在最好的商业Unix sw/hw系统(OS/X)下,它是:
#!/Applications/MacPython 2.5/python
或在FreeBSD上:
#!/usr/local/bin/python
然而,所有这些差异可以通过使用以下方法使脚本可移植:
#!/usr/bin/env python
技术上讲,在Python中,这只是一个注释行。
这一行只在从shell(从命令行)运行py脚本时使用。这就是所谓的“Shebang!”,它被用于各种情况,而不仅仅是Python脚本。
在这里,它指示shell启动特定版本的Python(以处理文件的其余部分)。
这意味着更多的是历史信息而不是“真实的”答案。
请记住,过去有很多类似unix的操作系统,它们的设计者都有自己的想法,把东西放在哪里,有时根本不包括Python、Perl、Bash或许多其他GNU/开源的东西。
这甚至适用于不同的Linux发行版。在Linux - pre-FHS1 -你可能在/usr/bin/或/usr/local/bin/中有Python。或者它可能还没有安装,所以您构建了自己的,并将其放在~/bin中。
Solaris是我工作过的最糟糕的系统,部分原因是从Berkeley Unix到System v的过渡。你可能会在/usr/、/usr/local/、/usr/ucb/、/opt/等目录下找到东西。这可能会导致一些很长的路径。我记得从Sunfreeware.com安装每个包在自己的目录,但我不记得它是否符号链接二进制文件到/usr/bin/。
哦,有时/usr/bin/在NFS服务器2上。
所以env实用程序就是为了解决这个问题而开发的。
然后你可以写#!/bin/env解释器,只要路径是正确的,程序就有合理的运行机会。当然,合理意味着(对于Python和Perl)还设置了适当的环境变量。对于bash/ksh/zsh,它可以正常工作。
这很重要,因为人们在传递shell脚本(如Perl和Python),如果你在Red Hat Linux工作站上硬编码/usr/bin/python,它将在SGI上坏掉……不,我认为IRIX把Python放在了正确的位置。但在Sparc空间站上,它可能根本无法运行。
我想念我的斯巴达站。但不是很多。好吧,现在你让我在易趣网上搜了。Bastages。
1文件系统层次标准。
2是的,有时候人们还是会做这样的事情。不,我的腰带上既没有萝卜也没有洋葱。
行#!/bin/bash/python3或#!/bin/bash/python指定要使用的python编译器。你可能安装了多个python版本。例如, a.py:
#!/bin/bash/python3
print("Hello World")
是python3脚本,和 b.py:
#!/bin/bash/python
print "Hello World"
是一条巨蟒。x脚本 为了运行这个文件。/a.py或。/b.py,你需要预先赋予文件执行权限,否则执行会导致Permission denied错误。 给予执行许可,
chmod +x a.py