多版本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為所欲為了。