是否可以构建一个适用于 Python 2 和 3 的 shebang?

Is it possible to construct a shebang that works for both Python 2 and 3?

我需要编写一个与 Python 2 和 Python 3 兼容的 Python 脚本,可以直接从 shell 调用(意味着它有一个shebang),并且可以 运行 在安装了 Python 版本的系统上,但可能不会同时安装这两个版本。

通常我可以像这样为 Python 2 写一个 shebang:

#!/usr/bin/env python

和 Python 3:

#!/usr/bin/env python3

但是如果没有安装相应的 Python 版本,这两个都会失败,因为据我所知,系统有 Python 3 但没有 Python 2不要将 python 别名或符号链接到 python3。 (如果我错了请纠正我。)

那么有没有一种方法可以使用 shebang 编写 Python 脚本,只要安装了其中一个,它就会使用 Python 2 或 Python 3 执行脚本?

这主要是为了解决即将发布的macOS中删除Python2,(注:我原来是写在错误地认为 Python 2 在 macOS 中会被 Python 3 取代,但实际上苹果正在完全删除 Python。) 但可以应用于 Linux还有。

实际上我会指定 python3 并将其作为先决条件。

但是,从技术上讲,可以欺骗 Python 文件使其成为自己的 shell 脚本包装器:

#!/bin/sh
''':'
for name in python3 python2 python
do
    type "$name" > /dev/null 2>&1 && exec "$name" "[=10=]" "$@"
done
echo >&2 "Please install python"
exit 1
':'''

print("Hello from Python")