你可能在他處見到過這鬼東西,when you install or uninstall python, and so on。那麼你確定與我同樣對這個鬼東西起了一絲"xing"趣!html
因爲Python2.x版本的腳本和Python3.x版本的腳本在語法上會有不兼容的狀況。那麼,必須使用不一樣的策略來容許【py】腳本使用基於腳本指定的Python解釋器版原本選擇合適的Python解釋器!這句話至關的拗口!說人話,就是我有個test腳本須要Python2.x版本的解釋器來執行。python
python test.py
你如何確保執行該腳本的解釋器版本就是我須要的解釋器!也就是,如何肯定你就是我須要的那個姑娘!上面的「python」命令,是系統在PATH中找到的。而PATH中Python變量,有可能被咱們手動修改,拋開這個不談,通常的,‘python’命令是調用Python3.x版本的解釋器。但這不徹底可靠,由於當系統在PATH中找‘python’命令時,若是Python2.x版本的在Python3.x的前面,那麼, Python的默認解釋器將變爲2.x版本,由於系統找到一個就返回了(系統在Python2.x的安裝目錄中找到了python.exe)。想一想你的Python解釋器的安裝目錄內。不論是哪一個版本都有這些:linux
針對這個弊端,又有了另外一個約定:windows
python2將引用Python 2.x的某些版本 python3將引用Python 3.x的某些版本
要了解更多的關於Python在‘python’命令方面的其餘的約定,請參考PEP 394bash
在Linux中(基於Unix的系統中),經過軟鏈接的方式來綁定指定的Python解釋器。好比:python2.7
這些軟連將不一樣的python命令指向一個實際位置的Python解釋器的啓動目錄。而這些在哪用到呢,被【Shebang】用到了,也就是俗稱的文件頭(這裏只聊shebang關於Python文件頭的部分)。經過文件頭系統就去軟連中找到對應的那個‘python’命令,而該命令有綁定到一個具體的Python解釋器。測試
#!/usr/bin/python2
上述問題也存在與Windows系統中,那麼咱們也但願在Windows中和Unix中一樣運行【Shebang】的能力,而且——沒有什麼是又好使又不須要發明新的語法或者約定來描述更讓人愉快的事情了!通過後來的完善,在PEP 397中正式出現並伴隨Python3.3版本發佈。它叫【Python Launcher】spa
Python launcher是用於Windows中的一個實用程序,可幫助咱們定位和執行不一樣版本的Python解釋器。它容許腳本或者命令行指示特定的Python版本的首選項,並將定位並執行該版本。mmp,仍是這麼拗口!說人話就是它很智能的區分開是你想要手動指定解釋版本執行py腳本,仍是想使用腳本文件指定的解釋器。你手動的選擇Python解釋器,這是調用了你在【PATH】中的Python變量。舉個例子。你在Windows下的cmd中,使用Python3.7版本的解釋器,執行一個文件:命令行
python3.7 test.py
這麼執行發生了什麼?Windows會在PATH中尋找python3.7這個解釋器。找到並執行test.py文件。而這個test.py(你從未打開過該文件)文件呢,其實它須要python2.7版本的解釋器來執行。這樣是否是就有問題了。咱們用Python launcher來解決這個問題,這玩意兒它會正確的選擇最合適的Python版本。3d
通常的,從3.3版本開始,Python launcher會伴隨解釋器的安裝而可選安裝,在安裝步驟的可選項中可勾選。如本博客的第一個圖所示。它會被放在系統的PATH中(Python3.6版本開始是這樣的,以前版本稍有變更,參見Python3.3版本新功能),若是你不手動添加的話。
另外一種方式是單獨安裝。如本博客的第一個圖所示,你能夠單獨勾選該項使之單獨安裝。在多個版本Python中,Python launcher只需安裝一次,而且兼容全部的Python版本。因此,若是在安裝3.6版本是,選擇Python launcher選項,那麼若是你在安裝3.7版本,該項則就沒法選中,由於已經安裝了。
Python launcher有兩個版本,一個是控制檯程序,另外一個是‘windows’(即GUI)程序。這兩個程序對應咱們Python安裝目錄中的‘python.exe’和‘pythonw.exe’這兩個可執行文件。
控制檯程序被命名爲‘py.exe’,而windows程序則命名爲‘pyw.exe’,而且pyw.exe將定位並執行pythonw.exe。
M:\>where py C:\Windows\py.exe M:\>where pyw.exe C:\Windows\pyw.exe
這裏僅用控制檯程序舉例。
若是你安裝Python launcher,那麼你能夠在任意的目錄打開cmd測試。
默認的,Python launcher打開了你最新版本的解釋器。能夠正常的使用和退出。而不是你最近安裝的某個版本的解釋器。
若是你的系統環境中有多個版本的Python解釋器,那麼,要想啓動,則能夠這樣:
固然,Python launcher能夠幫咱們解決某些問題。好比如今有個test.py文件,咱們用Python launcher來啓動。
#! python2.7 import sys print(sys.version) # --------- 以上爲文件內容, 如下爲執行結果 -------------- M:\>py test.py 2.7.14 (v2.7.14:84471935ed, Sep 16 2017, 20:19:30) [MSC v.1500 32 bit (Intel)]
能夠看到,Python launcher根據文件頭自動幫咱們調用了指定版本的解釋器來執行該文件。咱們修改下文件頭再來測試。
#! python3 import sys print(sys.version) # --------- 以上爲文件內容, 如下爲執行結果 -------------- M:\>py test.py 3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:06:47) [MSC v.1914 32 bit (Intel)]
這樣,Python launcher幫咱們找到咱們想要的那個姑娘。再來看個沒有文件頭的。
import sys print(sys.version) # --------- 以上爲文件內容, 如下爲執行結果 -------------- M:\>py test.py 3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:06:47) [MSC v.1914 32 bit (Intel)]
結果,Python launcher默認使用最新版本的解釋器來執行。咱們也能夠繞過文件頭,使用咱們指定版本的Python解釋器。
#! python2 import sys print(sys.version) # --------- 以上爲文件內容, 如下爲執行結果 -------------- M:\>py -3 test.py 3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:06:47) [MSC v.1914 32 bit (Intel)] M:\>py -3.5 test.py 3.5.4 (v3.5.4:3f56838, Aug 8 2017, 02:07:06) [MSC v.1900 32 bit (Intel)]
如上所示,咱們還能夠指定版原本執行腳本。
Python社區從多方面考慮下才有的Python launcher,方便咱們在windows下使用Python。若是如今的咱們用不到它,只需大概知道是幹嗎就行,不求甚解。
以上爲我我的對Python launcher的理解。若有錯誤,還望斧正。
see also:https://docs.python.org/3/using/windows.html#launcher # Python launcher for windows,Python3.3版本中的新功能
see also:https://www.python.org/dev/peps/pep-0397/ # PEP 397:Python launcher for windows # 詳細講解
that's all