尝试在两台不同的计算机上运行python脚本时遇到问题。在每台计算机上,我想使用python版本2.7.3运行脚本,但我遇到的问题是两台计算机以不同的方式命名python 2.7.3。其中一台计算机运行arch linux,在这台计算机上运行它名为python2。另一台计算机正在运行redhat linux,它使用名称python2.7.3。
我应该在shebang行中使用什么,以便脚本可以在两台计算机上执行而无需任何更改?我真正想要的是某种有条件的shebang系列,它可以选择使用哪个版本的Python。我只是运气不好,我必须保留两个不同版本的脚本吗?
P.S。我不能只使用#!/ usr / bin / env python作为arch linux计算机,这将引用python 3.2.3,而在redhat linux计算机上它将引用python 2.4。
答案 0 :(得分:7)
#!/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
答案 1 :(得分:5)
您可以编写一个小包装脚本,查看不同版本的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
当然这个脚本只是一个开始样本,你肯定可以通过多种方式改进它。只是让你知道我的意思。