
python腳本文件的第一行通常會(huì)寫(xiě)成如下的形式,
!/usr/bin/python
or
!/usr/bin/env python
它們用于指定執(zhí)行該腳本的解釋器,如上即是指定python作為解釋器。在計(jì)算機(jī)科學(xué)中這有個(gè)專(zhuān)門(mén)的術(shù)語(yǔ),叫做shebang,可見(jiàn)其使用之廣泛。
在計(jì)算機(jī)科學(xué)中,Shebang是一個(gè)由井號(hào)和嘆號(hào)構(gòu)成的字符串行,其出現(xiàn)在文本文件的第一行的前兩個(gè)字符。 在文件中存在Shebang的情況下,類(lèi)Unix操作系統(tǒng)的程序載入器會(huì)分析Shebang后的內(nèi)容,將這些內(nèi)容作為解釋器指令,并調(diào)用該指令,并將載有Shebang的文件路徑作為該解釋器的參數(shù)。
那么一開(kāi)始的兩種寫(xiě)法有什么區(qū)別呢?
如果直接采用 python file.py 的方式運(yùn)行腳本的話(huà),有沒(méi)有shebang都無(wú)所謂,因?yàn)槲覀冏约褐苯又付嗽撃_本的解釋器,即python。但是,如果以 ./file.py 的方式運(yùn)行的話(huà),一開(kāi)始的兩種寫(xiě)法就有一些區(qū)別了。
通常我們認(rèn)為 #!/usr/bin/python 采用了絕對(duì)路徑的寫(xiě)法,即指定了采用/usr/bin/python 解釋器來(lái)執(zhí)行該腳本。一般類(lèi)Unix系統(tǒng)下,python解釋器都位于該路徑,不幸的是如果python解釋器不在該路徑下的話(huà),./file.py 就無(wú)法運(yùn)行。而 #!/usr/bin/env python 的寫(xiě)法指定從PATH環(huán)境變量中來(lái)查找python解釋器的位置,因此只要環(huán)境變量中存在,該腳本即可執(zhí)行。
綜述所述,一般情況下采用 #!/usr/bin/env python 的寫(xiě)法更好,更加具有通用性。