我正在分发一个 python 程序,但有人抱怨说,在链接/usr/bin/python
指向 python3 的环境中,人们必须编辑 shebang 行或使用 python2 显式调用脚本。我可以在 shebang 行中编写 python2,但我担心不兼容。
python2 是否存在于每个(或至少每个 Linux)环境中?
我正在使用 autotools,所以我也很欣赏 autotools 的魔法提示。
我正在分发一个 python 程序,但有人抱怨说,在链接/usr/bin/python
指向 python3 的环境中,人们必须编辑 shebang 行或使用 python2 显式调用脚本。我可以在 shebang 行中编写 python2,但我担心不兼容。
python2 是否存在于每个(或至少每个 Linux)环境中?
我正在使用 autotools,所以我也很欣赏 autotools 的魔法提示。
我发现/usr/bin/env
它不是一个完美的、细粒度的 Python 检测器。但是,我刚刚发现可以限制AM_PATH_PYTHON
为主要版本 2。
查看 aclocal.m4 文件中的变量“_AM_PYTHON_INTERPRETER_LIST”。在我的 Mac 环境中,Python 二进制文件列表如下所示:
m4_define_default([_AM_PYTHON_INTERPRETER_LIST],
[python python2 python3 python3.3 python3.2 python3.1 python3.0 python2.7 dnl
python2.6 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0])
如果通过在 AM_PATH_PYTHON 之前立即发出此调用来修剪列表,则可以限制检查的 Python 二进制文件。因此,这有效地将您限制在 python2.6+ 中:
m4_define_default([_AM_PYTHON_INTERPRETER_LIST],[python2 python2.7 python2.6])
AM_PATH_PYTHON(2.6)
Python2 二进制文件几乎存在于每个 Linux 发行版中。但是,它不必命名为“python”并且位于 /usr/bin/python - 例如。Arch Linux 上的 /usr/bin/python 指向 python3.3。获取此二进制文件的最安全方法是/usr/bin/env python2
,因为 env 二进制文件几乎总是在这里。只需输入可执行文件的第一行:
#!/usr/bin/env python2
"""rest of yours python code here..."