16

尝试在两台不同的计算机上运行 python 脚本时遇到问题。在每台计算机上,我想使用 python 版本 2.7.3 运行脚本,但是我遇到的问题是两台计算机以不同的方式命名 python 2.7.3。其中一台计算机运行arch linux,在这台计算机上它被命名为python2。另一台计算机正在运行 redhat linux,它使用名称 python2.7.3。

我应该在 shebang 行中使用什么,以便脚本可以在两台计算机上执行而无需任何更改?我真正想要的是某种可以选择使用哪个版本的 Python 的有条件的 shebang 行。我只是运气不好,我必须保留两个不同版本的脚本吗?

PS我不能只使用#!/usr/bin/env python,因为在arch linux计算机上它指的是python 3.2.3,而在redhat linux计算机上它是指python 2.4。

4

2 回答 2

10
#!/bin/sh
# -*- mode: Python -*-

""":"
# bash code here; finds a suitable python interpreter and execs this file.
# prefer unqualified "python" if suitable:
python -c 'import sys; sys.exit(not (0x020500b0 < sys.hexversion < 0x03000000))' 2>/dev/null \
    && exec python "$0" "$@"
for pyver in 2.6 2.7 2.5; do
    which python$pyver > /dev/null 2>&1 && exec python$pyver "$0" "$@"
done
echo "No appropriate python interpreter found." >&2
exit 1
":"""

import sys
print sys.version

取自https://github.com/apache/cassandra/blob/trunk/bin/cqlsh

于 2013-10-21T08:17:05.023 回答
6

您可以编写一个小的包装脚本,查看不同版本的 python 可执行文件并使用它找到的那个。

例如:

#!/bin/sh -e
pythons=('python2', 'python2.7.3')
for py_exec in ${pythons[@]}; do
    py_exec="/usr/bin/$py_exec"
    if [[ -f $py_exec ]]; then
        exec $py_exec $1
    fi
done

当然,这个脚本只是一个开始示例,您当然可以通过多种方式对其进行改进。只是让你明白我的意思。

于 2012-08-22T11:04:54.073 回答