2

我正在分发一个 python 程序,但有人抱怨说,在链接/usr/bin/python指向 python3 的环境中,人们必须编辑 shebang 行或使用 python2 显式调用脚本。我可以在 shebang 行中编写 python2,但我担心不兼容。

python2 是否存在于每个(或至少每个 Linux)环境中?

我正在使用 autotools,所以我也很欣赏 autotools 的魔法提示。

4

2 回答 2

3

我发现/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)
于 2013-10-04T04:04:46.053 回答
1

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..."
于 2013-07-26T11:43:07.910 回答