淺談#!/usr/bin/python3 和 #!/usr/bin/env python3

原文: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/python3 和 #!/usr/bin/env python3

它的結果爲:

淺談#!/usr/bin/python3 和 #!/usr/bin/env python3

注意兩點

  • #!之後的空格是可選的,#!/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 的寫法更好,容錯率更高。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章