1. 程式人生 > >多版本Python安裝pip及pip版本管理終極教程

多版本Python安裝pip及pip版本管理終極教程

å¤çæ¬Pythonå®è£pipåpipçæ¬ç®¡çç»ææç¨

轉載自: https://zhuanlan.zhihu.com/p/37473690

此Blog簡直就是解決了我多年心病,這python, pip版本可煩死我了. 終於解決了感覺無敵了hahaha. 非常感謝知乎博主“稀有動物

有時候電腦或伺服器裡需要安裝多個版本的Python,比如Python2.7、Python3.5、Python3.6。同時存在多個版本的Python,如何安裝對應的pip成為一個頭疼的問題,本文從原理入手,詳解如何安裝對應Python版本的pip,當然也適合單一版本Python的pip的安裝。

本文所用系統環境:Ubuntu16。

pip,說到底只是Python的一個包,平時我們安裝Python包都是用pip安裝的,那麼pip怎麼安裝?最簡單的方法,可以使用下面命令:

sudo apt-get install python-pip

sudo apt-get install python3-pip

那麼如果要為Python3.5和Python3.6同時安裝pip這種方法就不行了,網上有很多方法,小編也是看的頭暈眼花,那麼下面小編介紹一種方法來從根本上解決多版本Python安裝對應pip的問題,以及對pip對應Python版本進行管理。

第一步,安裝pip包

上面說了,pip說到底就是Python的一個包。所以首先我們就要先安裝這個包,用下面兩行命令來安裝:

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python get-pip.py

如果你要為Python3.6安裝pip,就把上面第二行命令換成:

python3.6 get-pip.py

同理,為Python3.5安裝則換成相應版本。然後檢視一下是否安裝成功:

pip -V

顯示下面說明安裝成功。

pip 10.0.1 from /usr/local/lib/python3.6/dist-packages/pip (python 3.6)

其實到這已經成功安裝指定版本Python對應的pip,如果只為安裝pip則下一步可以不看。

第二步,管理pip對應的Python版本

我們發現,每次安裝pip,它都會把預設pip對應的Python修改,導致pip對應版本混亂。首先用下面命令檢視pip對應的Python版本:

pip -V
pip2 -V
pip3 -V

可能pip對應的是Python3.6,pip3對應的也是Python3.6。如果想讓pip對應Python2.7,pip3對應Python3.5怎麼辦呢?

轉到下面目錄:

cd /usr/local/bin

然後ls一下可能會發現好多pip檔案,比如pip、pip2、pip2.7、pip3、pip3.5等等。使用一下命令:

file pip

輸出:pip: Python script, ASCII text executable。發現pip其實是個Python指令碼。於是我們用vim開啟它:

#!/usr/bin/python3.6

# -*- coding: utf-8 -*-
import re
import sys

from pip._internal import main

if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
    sys.exit(main())

看第一行,第一行指定了這個指令碼對應的python版本,如果想把pip對應的python版本改為2.7的,只需修改python3.6為python2.7即可。修改儲存後執行:

pip -V

若出現下面提示

Traceback (most recent call last):
  File "/usr/local/bin/pip", line 7, in <module>
    from pip._internal import main
ImportError: No module named _internal

則說明修改後的python(上文修改的為python2.7)沒有安裝pip包,使用第一步的方法安裝pip包即可。

同理,如果想新建一個,比如新建一個pip3.6,touch pip3.6,然後把上面內容粘進去即可,其它版本也同理,最後別忘了為新建的檔案加上可執行許可權。

但是,不同版本pip對應的這個指令碼檔案的內容不同,上面顯示的是pip 10.0版本的,其它版本的指令碼檔案內容可能與之不同。直接改這個指令碼檔案來修改pip對應的python版本的前提是:當前指令碼檔案對應的Python版本與要修改對應的Python版本的pip包版本最好一致,不一致很可能出錯。最簡單的解決辦法是都升級為最新的pip版本。

到此為止,我們可以對pip為所欲為了。