2013-11-21 48 views
2

幾個廣泛使用的Python工具 - 例如pip,yolkipython - 是由腳本啓動的,shebang指定應使用Python實例運行它們。這條線的內容如何確定?工具啓動Python腳本中的shebang來自哪裏?


例如,OS X光機,在那裏我一直在使用蘋果的Python上,該行的內容

#!/usr/bin/python 

,如果我安裝了python.org版本,這是擺在

會發生什麼
/Library/Frameworks/Python.framework/Versions/2.7/python 

用一個符號在

/usr/local/bin/python 

然後更新或重新安裝了一個工具?如果我更新了一個工具,這條線會改變嗎?我需要完全重新安裝(而不是簡單地更新)每個工具來強制更改嗎?這條線會變成什麼?難道是

#!/usr/local/bin 

#!/Library/Frameworks/Python.framework/Versions/2.7 

有沒有辦法讓它

#!/usr/bin/env python 
+0

我想你是指'#!/ usr/local/bin/python',而不僅僅是'#!/ usr/local/bin'。 – Joe

+0

@Joe:正確。固定。 – orome

回答

1

線來自sys.executable value

如果符號鏈接python可執行文件,並從該符號鏈接運行Python,則sys.executable將使用新路徑。是的,更新或重新安裝該工具將反映已更改的可執行文件路徑。

我不知道有任何方法可以讓pip和朋友使用#!/usr/bin/env python來代替。這真是一個糟糕的主意,因爲這樣會使得始終使用正確的Python變得更加困難,在這種情況下,可以找到安裝的軟件包來運行命令行腳本。

+0

當運行'pip'來執行升級或重新安裝,並使用shebang所指示的'/ usr/local/bin'時。請問'sys.executable'的值(用於調用'pip')是'/ usr/local/bin',還是將作爲在命令提示符下運行的Python的路徑(即返回的Python通過'which')? – orome

+1

@raxacoricofallapatorius:'pip'本身就是一個命令行工具,所以它也有一個shebang行。你需要先更新*那行,或者用選擇的Python解釋器('/ usr/local/bin/python/path/to/pip/script/pip.py')運行'pip'。 –

+0

所以實際上,如果我有一個給定的shebang的'pip'並且只是在命令行上運行它'naked',它(以及我用過去版本的Python安裝的所有工具)將繼續使用該舊版?但是,一旦我運行'pip'來使用Python的顯式版本(一次)更新*本身*(一次)(如在上面的註釋中,或者通過編輯腳本來做到這一點),所有後續* pip所有*工具的更新會修理他們的shebang? – orome