原文:https://finthon.com/python-shebang/
簡介
在Python腳本的第一行,常常能看到#!/usr/bin/env python3
或者#!/usr/bin/python3
字樣,其中#!
符號在計算機行業中叫做 “Shebang”, 其作用是指定由哪個解釋器來執行腳本。在這裏即是指定python3作爲解釋器。
指定解釋器
windows系統是根據文件後綴決定打開方式的,因此首行Shebang是沒有用的,只有類unix系統纔是根據文件頭決定腳本運行方式。
在 類Unix 系統中 :
- 通過命令行形式指定解釋器:
python3 ./script.py
,這種方式腳本中就可以不添加Shebang行; - 通過腳本的Shebang來指定解釋器:
./script.py
,這種方式就需要腳本的第一行如果寫上#!/usr/bin/python3
或者是#!/usr/bin/env python3
, shell 會檢查腳本的第一行代碼, 發現有Shebang, 會按其指定的解釋器來執行,在這裏就是用python3 解釋器來執行; - 命令行指定要比Shebang指定優先級更高:當腳本里寫上
#!/usr/bin/python3
或者是#!/usr/bin/env python3
, 但是在命令行輸入python2 ./script.py
,最終是以python2解釋器來執行。
它的結果爲:
注意兩點:
#!
之後的空格是可選的,#!/usr/bin/env python3
和#! /usr/bin/env python3
這兩種寫法都可以;- 通過命令行指定解釋器執行文件是不必寫Shebang的, 只有被直接執行的文件纔有必要加入Shebang。
區別
#!/usr/bin/python3
採用了絕對路徑的寫法,即指定了採用/usr/bin/python3
該路徑下的解釋器來執行腳本。如果python3解釋器不在該路徑下的話(用anaconda安裝的話有可能不在),./script.py
就無法運行。
而#!/usr/bin/env python3
的寫法指定從PATH環境變量中查找python解釋器的位置,因此只要環境變量中存在,該腳本即可執行。所以一般情況下采用#!/usr/bin/env python3
的寫法更好,容錯率更高。