"python2" / "python3" 在脚本的 shebang 上安全吗?

Is "python2" / "python3" safe on a script's shebang?

有时我会看到 #!/usr/bin/python2#!/usr/bin/python3 而不是简单的 #!/usr/bin/python。我得到了这种方法的吸引力,你可以明确地说你是否需要 Python 2 或 3 而无需进行一些奇怪的版本检查。

这些 python2python3 是标准的吗?他们会在任何地方工作吗?还是有风险?

我刚刚确认我有 python2python3,但我使用的是 Cygwin,所以我不认为这意味着它对很多其他人来说一定是一样的。


注意: 对于任何考虑 #!/usr/bin/python 有或没有数字的人来说,更重要的是要记住 python 甚至并不总是在/usr/bin(例如 FreeBSD 和 OSX),所以如果您想要最大程度的便携性,请使用 #!/usr/bin/env python

然后祈祷 env/usr/bin.

作为一个参考点——我的系统上没有 python2 可执行文件:

$ python2
-bash: python2: command not found

所以我绝对不会认为这个是便携的。显然,我仍然可以 运行 通过显式选择可执行文件来编写您的脚本:

python2.7 your_script.py

或者通过符号链接 python2python2.7,但关键是它对我来说不是开箱即用的(我想对许多其他用户也是如此)。