當同時安裝Python2和Python3後,如何兼容並切換使用詳解(比如pip使用)

轉載自https://www.cnblogs.com/shabbylee/p/6792555.html


由於歷史原因,Python有兩個大的版本分支,Python2和Python3,又由於一些庫只支持某個版本分支,所以需要在電腦上同時安裝Python2和Python3,因此如何讓兩個版本的Python兼容,如何讓腳本在對應的Python版本上運行,這個是值得總結的。

對於Ubuntu 16.04 LTS版本來說,Python2(2.7.12)和Python3(3.5.2)默認同時安裝,默認的python版本是2.7.12。

當然你也可以用python2來調用。

如果想調用python3,就用python3.

 

對於Windows,就有點複雜了。因爲不論python2還是python3,python可執行文件都叫python.exe,在cmd下輸入python得到的版本號取決於環境變量裏哪個版本的python路徑更靠前,畢竟windows是按照順序查找的。比如環境變量裏的順序是這樣的:

那麼cmd下的python版本就是2.7.12。

反之,則是python3的版本號。

 

這就帶來一個問題了,如果你想用python2運行一個腳本,一會你又想用python3運行另一個腳本,你怎麼做?來回改環境變量顯然很麻煩。

網上很多辦法比較簡單粗暴,把兩個python.exe改名啊,一個改成python2.exe,一個改成python3.exe。這樣做固然可以,但修改可執行文件的方式,畢竟不是很好的方法。

我仔細查找了一些python技術文檔,發現另外一個我覺得比較好的解決辦法。

借用py的一個參數來調用不同版本的Python

py -2調用python2,

py -3調用的是python3.


python腳本需要python2運行時,只需在腳本前加上,然後運行py xxx.py即可。

#! python2

當python腳本需要python3運行時,只需在腳本前加上,,然後運行py xxx.py即可。

#! python3

就這麼簡單。

同時,這也完美解決了在pip在python2和python3共存的環境下報錯,提示Fatal error in launcher: Unable to create process using '"'的問題。


以下詳解轉載自:http://www.cnblogs.com/an9wer/p/5564284.html

在本文中我們均使用如下的腳本(我們把它命名爲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來運行該腳本。


關於不同版本的pip package

當需要python2的pip時,只需

py -2 -m pip install xxx

當需要python3的pip時,只需

py -3 -m pip install xxx

python2和python3的pip package就這樣可以完美分開了。

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