python2.X和python3.X在同一平台下的切換技巧
最近在自己的電腦上同時安裝了python2.7.11和python3.5.1
在網上搜了一些答案,主要還是參照《learning python》第五版里的appendix B,以及官方文檔:Python Launcher for Windows,總結如下:
從python3.3開始,安裝python的時候會自動安裝一個launcher,包含兩個程序:
py.exe for console programs 可以運行.py文件
pyw.exe for nonconsole (typically GUI) programs 可以運行.pyw文件
它允許我們在程序中提前聲明使用哪一版本的python(詳見方法一),或者可以在command-line里利用command-line argument來聲明python的版本(詳見方法二)。
在本文中我們均使用如下的腳本(我們把它命名為script.py保存起來)來進行測驗:
1> import sys
2> print(sys.version.splict()[0]) #打印出運行該程序的python版本
方法一
我們在script.py的第一行添加一行語句,以#!開頭(#!被稱作shebang,熟悉linux的程序員應該有所了解),改語句可以有如下四種(效果都是一樣的):
1. #!/usr/bin/env python*
2. #!/usr/bin/python*
3. #!/usr/local/bin/python*
4. #!python*
其中*是指python的版本,如果此處*是2,則會從我們電腦中安裝的最新版的python2來運行該腳本。例如我的電腦中同時裝了python2.5和python2.6,那么它會自動選擇python2.6來運行腳本。如果此處*是3,也是一樣的,會選擇最新一版的python3來運行。
當然,如果我們把*指定成某一明確的python版本,那么launcher會直接使用此版本來運行該腳本,前提是該版本存在。例如在腳本開頭添加#!python2.6,會直接用python2.6來運行腳本。
注意:
1. 只有以上四種情況可以在腳本開頭用來聲明python的版本。
2. #!后面可以加上空格。
3. 如果沒有使用以上四種方法的任何一種,會默認使用電腦中安裝的python2.X的最新一版來運行腳本。
方法二
我們可以不用在腳本中的第一行提前聲明使用何種版本的python,而是可以在command-line中使用py語句,加上command-line argument來切換python版本。
我們這里還是以script.py為例,在command-line中輸入
py -2 script.py
其效果和在腳本開頭添加#!python2是一樣的,我們也開始明確某一python版本,例如我們想使用python3.3
py -3.3 script.py
以上兩個例子中的-2和-3.3即為command-line argument。
注意:
方法一和方法二同時存在時,我們以方法二為准。
例如,我在script.py開頭添加#!python2.7,而在command-line中輸入py -3.5 script.py,那么launcher還是會用python3.5來運行該腳本。
總結
一旦安裝pyton3.3以上版本,就會自動安裝launcher,並且將py.exe和pyw.exe自動關聯到windows registry(注冊表),我們雙擊任何.py或者.pyw文件時都會使用相應的py.exe或者pyw.exe來執行。
一般不明確聲明,都會默認使用電腦中安裝的最新版的python2.X或者python3.X來運行。可以通過在command prompt(即DOS)中設置PY_PYTHON來暫時修改默認值(在powershell中設置無效)。至於永久修改默認值,我暫時還沒細究,讀者可以自行google。
之前我安裝的是python2.7,在command-line中可以用python script.py來執行。在安裝完python3.5之后,python script.py依然使用python2.7來執行。
本人尚在學習python中,本文是以我目前所掌握的知識來對launcher進行的理解。可能有所紕漏,還望讀者指正。
另,轉載本文請表明出處:http://www.cnblogs.com/an9wer/p/5564284.html