py launcher 適用於Windows用戶,適用於電腦上有多個Python版本的用戶
如今,最新的Python版本的Windows安裝程序中肯定附帶 py launcher 的安裝
文章內容涉及許多晦澀的詞彙,不懂就問
- The Python launcher for Windows(py launcher)是一個實用程序,可幫助查找和執行不同的Python版本
- py launcher 允許你通過腳本(或命令行:cmd、power shell)設置要使用Python版本
- 與環境變量(PATH變量)不同,默認情況下 py launcher 將爲你選擇最合適的Python版本
目錄一:入門
方法一:在命令行中指定Python版本
Changed in version 3.6.
在你通過安裝程序安裝Python 3.3及更高版本時, 你若勾選了
- py launcher
- Add Python to environment variables
安裝程序會自動爲你配置環境變量
python安裝路徑\
python安裝路徑\Scripts\
%appdata%\Local\Programs\Python\Launcher\
py launcher 與所有可用的Python版本兼容,因此安裝哪個版本都沒有關係
(1)要檢查py launcher是否可用,請在命令提示符(cmd或者power shell)中執行以下命令:
py
命令執行後,電腦上已安裝的最新版本的Python被啓動
(2)假設您安裝了多個版本的Python(例如2.7和3.8),執行上述命令後您會注意到Python 3.8被啓動,那麼,要啓動低版本的Python 2.7,請嘗試以下命令:
py -2.7
(3)如果你想要啓動電腦上最新版本的Python 2.x,請嘗試以下命令:
py -2
執行命令後,電腦上Python 2.x的最新版本被啓動
啓動電腦上最新版本的Python 3.x,與此同理
(4)如果看到以下錯誤,則說明您沒有安裝啓動器:
'py' is not recognized as an internal or external command,
operable program or batch file.
注意事項:虛擬環境
New in version 3.5.
如果py launcher在沒有明確的Python版本規範的情況下運行,並且虛擬環境(使用標準庫venv模塊或外部virtualenv工具創建)處於活動狀態,
則py launcher將運行虛擬環境的解釋器,而不是全局的解釋器。
要運行全局解釋器:
- 請停用虛擬環境,
- 或者 顯式指定全局Python版本。
方法二:在Python文件中指定Python版本
(1)創建一個hello.py文件用作測試,包含以下內容
#! python
import sys
sys.stdout.write("hello from Python %s\n" % (sys.version,))
在hello.py所在的目錄中,執行以下命令:
py hello.py
你會注意到終端中打印了最新的Python 2.x的版本號。
(2)現在將上述代碼的第一行更改爲:
#! python3
重新執行命令,打印最新的Python 3.x信息。
(3)與上述命令行示例一樣,您可以指定一個更明確的版本限定符。假設您已安裝Python 2.6,請嘗試將第一行更改爲:
#! python2.6
終端會打印出2.6版本信息
(3)你應該有所理解,
#! python
就是
#! python2
你可能會想#! python
爲什麼不是#! python3
?這是一個兼容性問題,而且在後文的目錄二中可以對此進行修改
(4)py launcher 在安裝時已經與Python文件關聯(即關聯.py, .pyw,.pyc文件)
這意味着,當您雙擊Windows資源管理器中的這些文件之一時,將使用py launcher
因此通過Python腳本第一行的內容,指定使用應使用的Python版本
方法二補充:Shebang Lines
如果Python文件的第一行以#!
開頭,則稱之爲 “shebang” lines
Linux和其他類似Unix操作系統對此類行(“shebang” lines)具有本地支持,“shebang” lines 通常在Linux和其他類似Unix系統上用於指示應如何執行Python腳本
py launcher 允許Windows上的Python腳本使用相同的功能,並且上面的示例(目錄一 > 方法二)演示了 “shebang” lines 的用法
爲了允許Python腳本中的shebang行在Unix和Windows之間可移植,py launcher 支持許多“虛擬”命令來指定要使用的解釋器。支持的虛擬命令是:
-
#! /usr/bin/env python
-
#! /usr/bin/python
-
#! /usr/local/bin/python
-
#! python
(1)此四行命令在安裝有py launcher 的Windows系統中,腳本是可以直接是使用的
(2)但是在類Unix系統中,只支持前三個命令
例如,如果Python腳本的開頭第一行爲
#! /usr/bin/python
將會運行默認的Python。
由於許多在Unix上運行的Python腳本已經有了這一行,因此你會發現Windows中py launcher可以直接使用這些腳本而無需進行修改。
但如果您要在Windows上編寫新腳本(又希望在Unix上使用),則應使用以/usr開頭的shebang lines 之一
(3)上面的任何虛擬命令都可以帶有顯式版本(僅是主版本,或者是主版本和次版本)後綴。
此外,可以通過在次要版本之後添加“ -32”來請求32位版本。
即/usr/bin/python2.7-32
將請求32位Python2.7的使用。
(4)New in version 3.7: 從py launcher3.7開始,可以通過後綴“ -64”請求64位版本。此外,可以指定一個主版本、一個沒有次版本的架構(例如/usr/bin/python3-64
)。
(5)/usr/bin/env
shebang lines的形式還有另一種特殊性質:在查找已安裝的Python解釋器之前,此表單將搜索可執行文件PATH用於Python可執行文件。這對應於Unix env程序的行爲,該行爲執行PATH 搜索。
目錄二:設置Shebang Lines中默認Python版本
環境變量PY_PYTHON
在某些情況下,Python腳本中包含版本限定符(通過Shebang Lines設置,上文有詳細講解),以指示該腳本將使用哪個版本的Python
你需要先明確幾個概念
#! python 3.8-64
- 這是一行shebang lines
- 版本限定符:3.8-64
- 主版本:3
- 次版本:8
-32
或-64
來指定是請求32位還是64位實現
請注意,“-64”選項僅適用於Python 3.7或更高版本附帶的py launch
如果在Python腳本中找不到版本限定符,則可以通過環境變量 PY_PYTHON
設置爲指定默認版本限定符(如果這句話你沒看懂,請不要糾結,往下面看就懂了)
您可以參考下圖設置環境變量 PY_PYTHON
默認情況下,shellbang lines中python指的是python2,可以進行修改
-
前提:shellbang lines皆指Python腳本中的第一行對版本設置
-
如果未設置相關選項,
- 則shellbang lines中python和 python2將使用安裝的最新Python 2.x版本,
- shellbang lines中python3將使用安裝的最新Python3.x
-
如果完全指定了版本,
- 因此shellbang lines中python3.1和python2.7將完全不參考任何選項
-
如果環境變量PY_PYTHON=3,
- 則shellbang lines中python和python3將都使用最新安裝的Python 3版本
- shellbang lines中python2將使用安裝的最新Python2.x
-
如果環境變量PY_PYTHON=3.1-32,
- 則shellbang lines中python將使用3.1版本的32位實現,
- 而shellbang lines中python3將使用最新安裝的Python(由於指定了主要版本,因此完全不考慮PY_PYTHON)
-
如果PY_PYTHON=3和PY_PYTHON3=3.1,
- 則shellbang lines中 python和python3都將專門使用3.1
py.ini文件
- 除了環境變量PY_PYTHON外,可以在py launch使用的py.ini文件中配置相同的設置
- py.ini配置文件的優先級低於環境變量PY_PYTHON
py launch 將搜索兩個py.ini
配置文件
- 優先級低:在py launch所在的路徑下(默認爲
C:\Users\zgh\AppData\Local\Programs\Python\Launcher
) - 優先級高:一個在
C:\Users\用戶名\AppData\Local
路徑下 - 如果路徑下沒有
py.ini
文件,請自行創建
請注意,INI文件中的鍵名不區分大小寫。
例如:
- 設置PY_PYTHON=3.1等同於包含以下內容的INI文件:
[defaults]
python=3.1
- 設置PY_PYTHON=3和PY_PYTHON3=3.1等效於INI文件,其中包含:
[defaults]
python=3
python3=3.1
實力不足,若有錯誤,歡迎指正
參考資料: