我在Python文件的顶部看到了这些:

#!/usr/bin/env python
#!/usr/bin/env python3

在我看来,没有这一行,文件运行是一样的。


当前回答

如果安装了多个版本的Python, /usr/bin/env将确保使用的解释器是环境$PATH中的第一个解释器。另一种方法是硬编码类似#!/usr/bin/python;这是可以的,但是不太灵活。

在Unix中,要解释的可执行文件可以通过#!在第一行的开头,后面跟着解释器(以及它可能需要的任何标志)。

如果您谈论的是其他平台,当然,这条规则不适用(但“shebang行”没有害处,如果您将该脚本复制到基于Unix的平台,如Linux、Mac等,则会有所帮助)。

其他回答

这是推荐的方法,在文档中提出:

2.2.2. 可执行Python脚本 在BSD的Unix系统上,可以直接编写Python脚本 可执行,就像shell脚本一样 # !/usr/bin/env python3.2

从http://docs.python.org/py3k/tutorial/interpreter.html executable-python-scripts

这告诉脚本python目录在哪里!

#! /usr/bin/env python

执行python文件时,可以使用./file.py,其中file是文件的名称。/usr/bin/env是PATH,然后python是python2, python3是python3(胡说)

#!/usr/bin/env python也可以允许python文件被其他程序执行,只要使用chmod +x file.py即可。

为了运行python脚本,我们需要告诉shell三件事:

该文件是一个脚本 我们希望哪个解释器执行脚本 所述解释器的路径

shebang #!完成(1)。shebang以#开头,因为#字符在许多脚本语言中是注释标记。因此,解释器会自动忽略shebang行的内容。

env命令完成(2.)和(3.)。引用“引力”,

env命令的一个常见用法是通过使 使用事实,env将搜索$PATH为它被告知的命令 推出。由于shebang线需要一个绝对路径 指定的,并且由于各种解释器(perl、bash、 Python)可能会有很大的变化,通常使用: #!/usr/bin/env perl,而不是试图猜测是否是 /usr/bin/perl, /usr/local/bin/perl, /usr/local/pkg/perl, /fileserver/usr/bin/perl,或者用户的/home/ mrdaniel /usr/bin/perl 系统…… 另一方面,env几乎总是在/usr/bin/env.中(除了 当它不是的时候;有些系统可能会使用/bin/env,但那是一个 相当罕见的情况,只发生在非linux系统上。)

如果你在虚拟环境(比如venv)中运行脚本,那么在venv上执行哪个python将显示python解释器的路径:

~ / env / venv / bin / python

请注意,虚拟环境的名称嵌入在Python解释器的路径中。因此,在脚本中硬编码这个路径会导致两个问题:

如果将脚本上传到存储库,则会强制其他用户使用相同的虚拟环境名称。前提是他们首先发现了问题。 即使在其他虚拟环境中有所有必需的包,也不能跨多个虚拟环境运行脚本。

因此,为乔纳森的回答补充一点,理想的shebang是#!/usr/bin/env python,不仅可以跨操作系统的可移植性,还可以跨虚拟环境的可移植性!