2016-09-08 79 views
1

有時我看到#!/usr/bin/python2#!/usr/bin/python3而不是簡單地#!/usr/bin/python。我明白這種方法的吸引力,你可以明確地說,如果你需要Python 2或3而不做一些奇怪的版本檢查。在腳本的shebang上,「python2」/「python3」是否安全?

難道這些python2python3標準有關係嗎?他們會到處工作嗎?還是有風險?

我剛剛確認我有python2python3但我在Cygwin上,所以我不認爲這意味着它對於很多其他人來說必然是相同的。


注:對於任何考慮#!/usr/bin/python帶或不帶一個數字,要記住一個更重要的一點是,python甚至不是總是/usr/bin(FreeBSD和OSX爲例),因此,如果您使用#!/usr/bin/env python想要最大的便攜性。

然後,只需祈禱env/usr/bin

+0

你只要,如果你安裝了多個版本的Python,需要顯式調用一個或另一個。 –

+1

值得一提的是,如果你希望在可執行目標上有更多的可移植性,你應該在你的shebang中使用'env'。不是每個python安裝都默認在'/ usr'中(我可以告訴你在FreeBSD和Mac OSX中不會發生這種情況)。 – farsil

+0

@farsil感謝,我可以補充一點,我確實有一個問題,雖然有關shebangs使用'env',是'#!的/ usr/bin中/ env的...'正確或'env'安裝在同樣的不同位置? –

回答

1

作爲參考單點 - 我沒有我的系統上執行python2

$ python2 
-bash: python2: command not found 

所以我絕對不會認爲這是一個可移植的。很顯然,我仍然可以通過明確選擇一個可執行文件運行腳本:

python2.7 your_script.py 

或者通過符號鏈接python2python2.7,但問題是,它不會開箱的,我(和我想象的數其他用戶也是如此)。

+0

出於好奇,什麼操作系統? –

+0

@CaptainMan - OS-X – mgilson

+0

出於好奇,python2.7是標準還是軟件包維護人員提供的另一個方便的軟鏈接? –