python多版本控制

<p align = "center">可以看我的博客 lmwen.top</p>
<p align = "center">或者訂閱我的公眾號</p>

懶寫作

簡介
有稍微接觸python的人就會知道,python中有兩個比較熱門的版本,一個是python 2.7.x ,一個是python3.x,因為python易用,很多l(xiāng)inux系統(tǒng)上都默認集成了某個版本的python,我見的大多數(shù)是python2.7.x。因為python2.7.x和python3.x之間存在一些差異,所以使用不同版本開發(fā)的python程序并不能完全兼容,伴隨著這個問題的出現(xiàn),python版本控制變得越來越重要。
安裝pyenv進行版本控制
為了解決python多版本帶來的問題,python版本切換工具—pyenv應運而生。pyenv工具的作用很明顯,就是切換不同python的版本,滿足相應的開發(fā)需求,比如開發(fā)一個項目需要用到python3.x,而此時使用的卻是python2.7.x,就可以通過pyenv安裝python3.x,然后將系統(tǒng)默認的python切換成3.x版本的python。
pyenv工具是github上的一個開源項目(github是一個代碼托管網(wǎng)站),所以我們可以直接通過git工具獲得pyenv對于的代碼,然后修改系統(tǒng)的環(huán)境變量,就可以在任意目錄下運行pyenv工具,進行python的版本切換了,具體的操作如下
12345678

$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv #使用 git 把 pyenv 下載到家目錄$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc #然后需要修改環(huán)境變量,使用 Bash Shell 的輸入$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc$ echo 'eval "$(pyenv init -)"' >> ~/.bashrc #最后添加 pyenv init$ exec $SHELL -l #輸入命令重啟 Shell,然后就可以重啟pyenv


通過上面的操作后,我們就可以使用pyenv了,使用下面命令來看一下pyenv可以安裝那些python版本。
1

$ pyenv install --list


你會發(fā)現(xiàn)pyenv支持很多不同版本的python,這些版本都有各自的優(yōu)缺點,在不同的需求上可以使用不同python版本,比如在數(shù)據(jù)處理方面,可以使用科學技術(shù)的python,也就是anaconda。
此時,我系統(tǒng)中的python版本是2.7.12,這里我們通過pyenv來安裝python3.6.1,通過下面命令就可以輕松的安裝了
1

$ pyenv install 3.6.1

該命令會從相應的地址上下載我們需要的3.6.1,然后直接為我們安裝


這種方式非常簡單,但是通過這中方式下載對應版本的python比較慢,所以改變一下方法,首先依舊是使用pyenv install 3.6.1 這條命令,該命令會顯示出相應的下載地址,獲得下載地址后,可以通過ctrl+c強制停止該命令的運行,然后通過wget或迅雷來下載安裝,并將下載好的文件放到 /.pyenv/cache文件夾下,cache一開始是不存在的,需要用戶自己在/.pyenv目錄下創(chuàng)建,然后再執(zhí)行下面命令
1

$ pyenv install 3.6.1 -v #不要忘記-v參數(shù)

步驟總結(jié)如下:
1.執(zhí)行 pyenv install 3.6.1 獲取下載鏈接
2.用wget從下載鏈接中獲取文件 Python-3.6.1.tar.xz
3.將安裝包移動到 ~/.pyenv/cache/Python-3.6.1.tar.xz
4.重新執(zhí)行 pyenv install 3.6.1 -v 命令。該命令會檢查 cache 目錄下已有文件的完整性,若確認無誤,則會直接使用該安裝文件進行安裝。
通過上面的操作,就把python3.6.1版本安裝好了,此時最好先更新一下pyenv的數(shù)據(jù)庫,命令如下
1

$ pyenv rehash

此時我們來查看一下系統(tǒng)中安裝過那些python版本
1

$ pyenv versions


從圖中可以看出,該系統(tǒng)中有個系統(tǒng)自帶的python版本,還有一個就是我們剛剛安裝的python3.6.1
接著通過下面命令切換系統(tǒng)全局的python版本
1

$ pyenv global anaconda3-4.1.0


還可以直接在命令行中輸入python來驗證當前全局的python版本,可以發(fā)現(xiàn)系統(tǒng)版本已經(jīng)變?yōu)?.6.1了

使用同樣的命令,將系統(tǒng)全局python切回原來的版本

如果你想要將python的某個版本卸載掉,可以使用下面命令
1

$ pyenv uninstall

如果你想更新pyenv,可以使用下面命令
1

$ pyenv update

安裝virtualenv創(chuàng)建純凈虛擬環(huán)境
雖然通過pyenv進行python的版本切換已經(jīng)不錯了,但是每次開發(fā)不同python版本的項目時都要切換python版本,有點費力。當我們不同的項目要用到不同版本的庫時,pyenv就愛莫能助了,舉個具體的例子,Test1和Test2都要使用Request這個第三方庫,但是Test1要求使用1.0版本的Request,而Test2要求使用2.0版本的Request,此時pyenv并不能對庫進行版本切換,無論pytyon本身的版本如何切換,系統(tǒng)中使用的庫默認都是一個版本的,當然可以通過一些配置讓不同的項目不從不同的路徑上加載需要的庫,當不同的項目變得龐大繁雜時,這種方式會顯得是否笨拙。
為了解決這種問題,我們可以使用virtualenv,virtualenv的作用是什么?通俗易懂的講就是創(chuàng)建一個虛擬環(huán)境,不同虛擬環(huán)境內(nèi)的python版本和庫的版本都可以相互獨立、互不影響,同樣回到上面的例子,首先我們通過virtualenv創(chuàng)建Test1和Test2這兩個虛擬環(huán)境,并在這兩個環(huán)境中配置相應的python版本和庫,如在Test1這個虛擬環(huán)境中,我們使用python2.7.x和1.0版本的Request,而在Test2這個虛擬環(huán)境中使用python3.x和2.0版本的Request,在這兩個虛擬環(huán)境中分別創(chuàng)建Test1項目和Test2項目,這兩項目之間就不會相互影響,使用各自的虛擬環(huán)境中使用各自的配置,這樣開發(fā)不同需求的項目就變得簡單而易于管理。
那么首先我們來安裝virtualenv,通過下面命令可以簡單安裝
1

$ pip install virtualenv

在我的ubuntu系統(tǒng)中已經(jīng)默認安裝了virtualenv[圖片上傳中。。。(8)]
安裝完后,就可以使用virtualenv創(chuàng)建相應的虛擬環(huán)境了,命令如下
1

$ virtualenv test


從圖中可以看到,test這個虛擬環(huán)境被安裝到了/home/ayuliao目錄下,進入相應的目錄,這里是/home/ayuliao/test/bin,可以通過ls命令來查看該虛擬環(huán)境下?lián)碛心切┪募?br> 運行其中的activate文件,進入相應的虛擬環(huán)境
1

$ source activate


解釋一下這些文件:
activate :這個virtualenv的激活文件,運行該文件就可以進入相應的虛擬環(huán)境匯中
pip:這個virtualenv獨立的pip,與系統(tǒng)的pip相互獨立了
python:系統(tǒng)python解釋器的一個副本,系統(tǒng)全局下使用了哪個版本的python,該虛擬環(huán)境就會使用哪個版本的python
python2.7:所有的新包會被存放到該文件夾下

接著我們可以通過下面命令來看一下該虛擬環(huán)境擁有的包/庫
1

$ pip list --format=columns #列的形式顯示


可以發(fā)現(xiàn),虛擬環(huán)境中已經(jīng)有了一些基本的庫了
我們可以通過該虛擬環(huán)境的pip工具安裝我們需要的第三方庫,在虛擬環(huán)境中安裝的任何庫都不會污染系統(tǒng)中python的環(huán)境和其他的虛擬環(huán)境
在虛擬環(huán)境中做完一些操作后,就可以通過下面命令退出虛擬環(huán)境
1

$ deactivate


但是每次通過virtualenv創(chuàng)建一個虛擬環(huán)境后,都要進入該虛擬環(huán)境對應的目錄啟動其中的activate文件,比較麻煩,有沒有更方便的方法?畢竟人生苦短嘛。
當然有,我們可以安裝virtualenvwrapper,virtualenvwrapper其實就是virtualenv的擴展管理包,使用它可以更加方便虛擬環(huán)境
首先進行virtualenvwrapper的安裝
1

$ pip install virtualenvwrapper


剛安裝完后,virtualenvwrapper是不可以直接使用的,它會默認在/usr/local/bin下生成virtualenvwrapper.sh文件
[圖片上傳中。。。(14)]
你需要運行該文件才行,現(xiàn)在先別急著運行該文件,先看一下文件中寫了什么,可以使用vim來查看

可以看見,該文件中寫好了我們需要做什么配置,下面按照該文件的提示,配置好相應的環(huán)境
將相應的內(nèi)容寫入到~/.bashrc中
12

$ echo 'export WORKON_HOME=$HOME/.virtualenvs' >> ~/.bashrc$ echo 'source /usr/local/bin/virtualenvwrapper.sh' >> ~/.bashrc

再運行bashrc文件
1

$ source ~/.bashrc

此時virtualenvwrapper就可以使用了。
通過下面命令創(chuàng)建一個虛擬環(huán)境
1

$ mkvirtualenv test2


你會發(fā)現(xiàn),創(chuàng)建完后,直接就進入虛擬環(huán)境了,不再用進入相應的目錄下手動啟動activate文件,非常方便。
同樣可以通過deactivate推出虛擬環(huán)境,退出后,可以通過workon命令查看到已經(jīng)創(chuàng)建的虛擬環(huán)境
1

$ workon


可以看見這里現(xiàn)實出了我們剛剛創(chuàng)建了test2虛擬環(huán)境,但是卻沒有顯示直接通過virtualenv創(chuàng)建的test虛擬環(huán)境
通過下面命令進入相應的虛擬環(huán)境
1

$ workon test2

當我們不想在使用該虛擬環(huán)境時,可以通過下面命令將該虛擬環(huán)境刪除
1

$ rmvirtualenv test2


這里提一下,如果想刪除直接通過virtualenv命令創(chuàng)建的虛擬環(huán)境,可以將該虛擬環(huán)境對于的文件夾直接整個刪除,該虛擬環(huán)境就從你的計算機上移除了。
結(jié)尾
后面的開發(fā),我們都會在虛擬環(huán)境中進行。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 字符集和編碼簡介 在編程中常??梢砸姷礁鞣N字符集和編碼,包括ASCII,MBCS,Unicode等字符集。確切的說...
    蘭山小亭閱讀 9,100評論 0 13
  • 編碼問題一直困擾著開發(fā)人員,尤其在 Java 中更加明顯,因為 Java 是跨平臺語言,不同平臺之間編碼之間的切換...
    x360閱讀 2,582評論 1 20
  • pyenv:一個簡單的python版本管理工具,它能夠讓你改變?nèi)謕ython版本,安裝并同時啟用多個版本,并且可...
    FiveStrong閱讀 3,003評論 1 3
  • " 生下來,才能活下去 " 每天的忙碌奔波讓生活定義成勞碌無為,每每都在思索生活的意義,生活的本來面貌到底...
    傲嬌娟子閱讀 203評論 0 1
  • 碌碌無為的時光總是一晃眼就過了,白開水一般的日子一天天的流過,今天凌晨昨天晚上我在做什么,今天晚上明天凌晨我又將是...
    綠桃與紅杏閱讀 515評論 0 0

友情鏈接更多精彩內(nèi)容