2012-08-22 29 views
14

當試圖在兩臺不同的計算機上運行python腳本時遇到問題。在每臺計算機上,我想使用python 2.7.3版運行腳本,但是我遇到的問題是兩臺計算機以不同的方式命名python 2.7.3。其中一臺電腦運行arch linux,並在這臺電腦上命名爲python2。另一臺電腦運行redhat linux,它使用名稱python2.7.3。針對不同版本的Python的條件shebang行

我應該在shebang行中使用什麼,以便腳本可以在兩臺計算機上執行而無需任何更改?我真正想要的是某種有條件的shebang行,可以選擇使用哪個版本的Python。我只是運氣不好,我必須保留兩個不同版本的腳本?

P.S.我不能僅僅使用#!/ usr/bin/env python作爲在arch Linux計算機上使用,這將涉及到python 3.2.3,在redhat linux計算機上,它將涉及到python 2.4。

+4

一個宏偉的問題採取的。請注意,推薦的練習(根據PEP-394),表明python2.x符號鏈接爲'python2',所以真的這是代表redhat的一個包裝問題(其他發行版)。 – WhyNotHugo

+2

爲什麼你不能在每臺將鏈接到python2.7.3的計算機中定義一個新變量?或只是一個鏈接? – slallum

+2

您可以隨時使用'python2.7.3 my-program.py' :) – Shaung

回答

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 

當然這個腳本僅僅是一個開始樣品,你肯定可以改善它在許多方面。只要給你一個我的意思的想法。

6
#!/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" "[email protected]" 
for pyver in 2.6 2.7 2.5; do 
    which python$pyver > /dev/null 2>&1 && exec python$pyver "$0" "[email protected]" 
done 
echo "No appropriate python interpreter found." >&2 
exit 1 
":""" 

import sys 
print sys.version 

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

相關問題