我在Python文件的顶部看到了这些:
#!/usr/bin/env python
#!/usr/bin/env python3
在我看来,没有这一行,文件运行是一样的。
我在Python文件的顶部看到了这些:
#!/usr/bin/env python
#!/usr/bin/env python3
在我看来,没有这一行,文件运行是一样的。
当前回答
执行python文件时,可以使用./file.py,其中file是文件的名称。/usr/bin/env是PATH,然后python是python2, python3是python3(胡说)
#!/usr/bin/env python也可以允许python文件被其他程序执行,只要使用chmod +x file.py即可。
其他回答
您可以使用virtualenv尝试解决这个问题
这里是test.py
#! /usr/bin/env python
import sys
print(sys.version)
创建虚拟环境
virtualenv test2.6 -p /usr/bin/python2.6
virtualenv test2.7 -p /usr/bin/python2.7
激活每个环境,然后检查差异
echo $PATH
./test.py
行#!/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
如果你在虚拟环境(比如venv)中运行脚本,那么在venv上执行哪个python将显示python解释器的路径:
~ / env / venv / bin / python
请注意,虚拟环境的名称嵌入在Python解释器的路径中。因此,在脚本中硬编码这个路径会导致两个问题:
如果将脚本上传到存储库,则会强制其他用户使用相同的虚拟环境名称。前提是他们首先发现了问题。 即使在其他虚拟环境中有所有必需的包,也不能跨多个虚拟环境运行脚本。
因此,为乔纳森的回答补充一点,理想的shebang是#!/usr/bin/env python,不仅可以跨操作系统的可移植性,还可以跨虚拟环境的可移植性!
这是一个shell约定,告诉shell哪个程序可以执行脚本。
#!/usr/bin/env python
解析为Python二进制文件的路径。
强调一件大多数人都忽略了的事情可能是有道理的,这可能会妨碍立即理解。在终端中输入python时,通常不会提供完整路径。相反,可执行文件在PATH环境变量中查找。反过来,当你想直接执行Python程序/path/to/app.py时,必须告诉shell要使用哪个解释器(通过hashbang,其他贡献者在上面解释的内容)。
Hashbang期望到解释器的完整路径。因此,要直接运行你的Python程序,你必须提供Python二进制文件的完整路径,这差异很大,特别是考虑到使用virtualenv。为了解决可移植性,使用了/usr/bin/env的技巧。后者最初的目的是就地改变环境并在其中运行命令。当没有提供任何更改时,它将在当前环境中运行该命令,这将有效地导致相同的PATH查找。
源代码来自unix stackexchange