2011-06-09 25 views
1

給定一組蟒程序:如何用適當的python版本啓動python程序?

/tool/a.py 
/tool/b.py 
/tool/c.py 
/tool/d.py 
... 

存儲在共享的網絡目錄,在混合環境中執行(Solaris和Linux的不同口味),並且所有需要特定蟒版本可能不在用戶$ PATH中,並且可能不安裝在不同類型機器的相同位置。

程序如何指定要使用的Python解釋器?

替代我已經考慮:

  1. 在每個Python程序認領,裁判到啓動當前類型的機器的適當python解釋一個python包裝。但是execve不允許將包裝器可執行文件作爲shell腳本來實現,並且爲每臺機器編譯本機可執行文件都需要大量的維護。

  2. 爲每個python程序創建一個啓動shell腳本。所有的shell腳本可以共享相同的邏輯來選擇python解釋器,但是我希望避免爲每個python程序分配一個shell腳本(如果可能的話)。

  3. 製造某種黑客攻擊,使每個程序可能都既作爲一個shell腳本和Python程序,類似於運行:

"""exec" /tool/python_wrapper "$0" "[email protected]" """#" 
def foo(): 
print "foo" 
foo() 

你有一些其他的想法?

回答

1

我會選擇3.它會有一個小的啓動延遲,但它是最靈活的選擇。

  1. 一個人不會工作,因爲你在混合環境中運行,這將是一個噩夢,設置正確的一切。

  2. 可以工作,但是,正如您所說的,您需要同時維護.py程序和shell腳本。此外,它是沒有太大的不同,那麼3

4

我知道這是不太你正在尋找的答案,但我只是確保蟒蛇執行程序在PATH,然後用env來找到他們。從長遠來看,我認爲這將少得多的維護和頭痛。例如。

#!/usr/bin/env python2.5 
print "Hello from python 2.5!" 

 

#!/usr/bin/env python2.6 
print "Hello from python 2.6!" 

 

#!/usr/bin/env python2.7 
print "Hello from python 2.7!" 
1

我會做選項#1和使用env避開解釋限制。需要注意的是Python的可能/usr/bin已經創建特定版本的二進制文件(它沒有我的系統上):

#!/usr/bin/env python2.4 

或者

#!/usr/bin/env python2.6 
1

您可以直接強制Python解釋器通過給.py文件參數的Python的二進制:

python2.6 /tool/a.py 

python2.4 /tool/b.py 

爲了維護您要使用virtuale每個工具不同的Python環境和不同的依存關係(Python的蛋或原生擴展) nv:

http://pypi.python.org/pypi/virtualenv

相關問題