<p align = "center">可以看我的博客 lmwen.top</p>
<p align = "center">或者訂閱我的公眾號(hào)</p>
簡(jiǎn)介
有稍微接觸python的人就會(huì)知道南誊,python中有兩個(gè)比較熱門(mén)的版本歌亲,一個(gè)是python 2.7.x 汰翠,一個(gè)是python3.x踪栋,因?yàn)閜ython易用倦青,很多l(xiāng)inux系統(tǒng)上都默認(rèn)集成了某個(gè)版本的python祭饭,我見(jiàn)的大多數(shù)是python2.7.x芜茵。因?yàn)閜ython2.7.x和python3.x之間存在一些差異,所以使用不同版本開(kāi)發(fā)的python程序并不能完全兼容倡蝙,伴隨著這個(gè)問(wèn)題的出現(xiàn)九串,python版本控制變得越來(lái)越重要。
安裝pyenv進(jìn)行版本控制
為了解決python多版本帶來(lái)的問(wèn)題,python版本切換工具—pyenv應(yīng)運(yùn)而生猪钮。pyenv工具的作用很明顯品山,就是切換不同python的版本,滿足相應(yīng)的開(kāi)發(fā)需求烤低,比如開(kāi)發(fā)一個(gè)項(xiàng)目需要用到python3.x肘交,而此時(shí)使用的卻是python2.7.x,就可以通過(guò)pyenv安裝python3.x拂玻,然后將系統(tǒng)默認(rèn)的python切換成3.x版本的python酸些。
pyenv工具是github上的一個(gè)開(kāi)源項(xiàng)目(github是一個(gè)代碼托管網(wǎng)站),所以我們可以直接通過(guò)git工具獲得pyenv對(duì)于的代碼檐蚜,然后修改系統(tǒng)的環(huán)境變量魄懂,就可以在任意目錄下運(yùn)行pyenv工具,進(jìn)行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
通過(guò)上面的操作后篡腌,我們就可以使用pyenv了嘹悼,使用下面命令來(lái)看一下pyenv可以安裝那些python版本。
1
$ pyenv install --list
你會(huì)發(fā)現(xiàn)pyenv支持很多不同版本的python,這些版本都有各自的優(yōu)缺點(diǎn),在不同的需求上可以使用不同python版本,比如在數(shù)據(jù)處理方面新蟆,可以使用科學(xué)技術(shù)的python捉邢,也就是anaconda。
此時(shí)宠进,我系統(tǒng)中的python版本是2.7.12材蹬,這里我們通過(guò)pyenv來(lái)安裝python3.6.1堤器,通過(guò)下面命令就可以輕松的安裝了
1
$ pyenv install 3.6.1
該命令會(huì)從相應(yīng)的地址上下載我們需要的3.6.1,然后直接為我們安裝
這種方式非常簡(jiǎn)單拱撵,但是通過(guò)這中方式下載對(duì)應(yīng)版本的python比較慢乓旗,所以改變一下方法,首先依舊是使用pyenv install 3.6.1 這條命令渺鹦,該命令會(huì)顯示出相應(yīng)的下載地址毅厚,獲得下載地址后浦箱,可以通過(guò)ctrl+c強(qiáng)制停止該命令的運(yùn)行,然后通過(guò)wget或迅雷來(lái)下載安裝酷窥,并將下載好的文件放到 /.pyenv/cache文件夾下,cache一開(kāi)始是不存在的蓬推,需要用戶自己在/.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.將安裝包移動(dòng)到 ~/.pyenv/cache/Python-3.6.1.tar.xz
4.重新執(zhí)行 pyenv install 3.6.1 -v 命令。該命令會(huì)檢查 cache 目錄下已有文件的完整性糕珊,若確認(rèn)無(wú)誤,則會(huì)直接使用該安裝文件進(jìn)行安裝澜公。
通過(guò)上面的操作坟乾,就把python3.6.1版本安裝好了,此時(shí)最好先更新一下pyenv的數(shù)據(jù)庫(kù)慧脱,命令如下
1
$ pyenv rehash
此時(shí)我們來(lái)查看一下系統(tǒng)中安裝過(guò)那些python版本
1
$ pyenv versions
從圖中可以看出宗兼,該系統(tǒng)中有個(gè)系統(tǒng)自帶的python版本,還有一個(gè)就是我們剛剛安裝的python3.6.1
接著通過(guò)下面命令切換系統(tǒng)全局的python版本
1
$ pyenv global anaconda3-4.1.0
還可以直接在命令行中輸入python來(lái)驗(yàn)證當(dāng)前全局的python版本氮采,可以發(fā)現(xiàn)系統(tǒng)版本已經(jīng)變?yōu)?.6.1了
使用同樣的命令殷绍,將系統(tǒng)全局python切回原來(lái)的版本
如果你想要將python的某個(gè)版本卸載掉,可以使用下面命令
1
$ pyenv uninstall
如果你想更新pyenv鹊漠,可以使用下面命令
1
$ pyenv update
安裝virtualenv創(chuàng)建純凈虛擬環(huán)境
雖然通過(guò)pyenv進(jìn)行python的版本切換已經(jīng)不錯(cuò)了主到,但是每次開(kāi)發(fā)不同python版本的項(xiàng)目時(shí)都要切換python版本,有點(diǎn)費(fèi)力躯概。當(dāng)我們不同的項(xiàng)目要用到不同版本的庫(kù)時(shí)娶靡,pyenv就愛(ài)莫能助了塔鳍,舉個(gè)具體的例子轮纫,Test1和Test2都要使用Request這個(gè)第三方庫(kù)掌唾,但是Test1要求使用1.0版本的Request犀斋,而Test2要求使用2.0版本的Request,此時(shí)pyenv并不能對(duì)庫(kù)進(jìn)行版本切換却舀,無(wú)論pytyon本身的版本如何切換挽拔,系統(tǒng)中使用的庫(kù)默認(rèn)都是一個(gè)版本的但校,當(dāng)然可以通過(guò)一些配置讓不同的項(xiàng)目不從不同的路徑上加載需要的庫(kù)状囱,當(dāng)不同的項(xiàng)目變得龐大繁雜時(shí)亭枷,這種方式會(huì)顯得是否笨拙。
為了解決這種問(wèn)題,我們可以使用virtualenv答倡,virtualenv的作用是什么?通俗易懂的講就是創(chuàng)建一個(gè)虛擬環(huán)境设江,不同虛擬環(huán)境內(nèi)的python版本和庫(kù)的版本都可以相互獨(dú)立、互不影響歼捏,同樣回到上面的例子瞳秽,首先我們通過(guò)virtualenv創(chuàng)建Test1和Test2這兩個(gè)虛擬環(huán)境练俐,并在這兩個(gè)環(huán)境中配置相應(yīng)的python版本和庫(kù)袖迎,如在Test1這個(gè)虛擬環(huán)境中腺晾,我們使用python2.7.x和1.0版本的Request燕锥,而在Test2這個(gè)虛擬環(huán)境中使用python3.x和2.0版本的Request悯蝉,在這兩個(gè)虛擬環(huán)境中分別創(chuàng)建Test1項(xiàng)目和Test2項(xiàng)目,這兩項(xiàng)目之間就不會(huì)相互影響鼻由,使用各自的虛擬環(huán)境中使用各自的配置暇榴,這樣開(kāi)發(fā)不同需求的項(xiàng)目就變得簡(jiǎn)單而易于管理蕉世。
那么首先我們來(lái)安裝virtualenv蔼紧,通過(guò)下面命令可以簡(jiǎn)單安裝
1
$ pip install virtualenv
在我的ubuntu系統(tǒng)中已經(jīng)默認(rèn)安裝了virtualenv[圖片上傳中歉井。蜜自。。(8)]
安裝完后,就可以使用virtualenv創(chuàng)建相應(yīng)的虛擬環(huán)境了戈鲁,命令如下
1
$ virtualenv test
從圖中可以看到仇参,test這個(gè)虛擬環(huán)境被安裝到了/home/ayuliao目錄下,進(jìn)入相應(yīng)的目錄婆殿,這里是/home/ayuliao/test/bin诈乒,可以通過(guò)ls命令來(lái)查看該虛擬環(huán)境下?lián)碛心切┪募?br> 運(yùn)行其中的activate文件,進(jìn)入相應(yīng)的虛擬環(huán)境
1
$ source activate
解釋一下這些文件:
activate :這個(gè)virtualenv的激活文件婆芦,運(yùn)行該文件就可以進(jìn)入相應(yīng)的虛擬環(huán)境匯中
pip:這個(gè)virtualenv獨(dú)立的pip怕磨,與系統(tǒng)的pip相互獨(dú)立了
python:系統(tǒng)python解釋器的一個(gè)副本喂饥,系統(tǒng)全局下使用了哪個(gè)版本的python,該虛擬環(huán)境就會(huì)使用哪個(gè)版本的python
python2.7:所有的新包會(huì)被存放到該文件夾下
接著我們可以通過(guò)下面命令來(lái)看一下該虛擬環(huán)境擁有的包/庫(kù)
1
$ pip list --format=columns #列的形式顯示
可以發(fā)現(xiàn)肠鲫,虛擬環(huán)境中已經(jīng)有了一些基本的庫(kù)了
我們可以通過(guò)該虛擬環(huán)境的pip工具安裝我們需要的第三方庫(kù)员帮,在虛擬環(huán)境中安裝的任何庫(kù)都不會(huì)污染系統(tǒng)中python的環(huán)境和其他的虛擬環(huán)境
在虛擬環(huán)境中做完一些操作后,就可以通過(guò)下面命令退出虛擬環(huán)境
1
$ deactivate
但是每次通過(guò)virtualenv創(chuàng)建一個(gè)虛擬環(huán)境后导饲,都要進(jìn)入該虛擬環(huán)境對(duì)應(yīng)的目錄啟動(dòng)其中的activate文件捞高,比較麻煩,有沒(méi)有更方便的方法帜消?畢竟人生苦短嘛棠枉。
當(dāng)然有,我們可以安裝virtualenvwrapper泡挺,virtualenvwrapper其實(shí)就是virtualenv的擴(kuò)展管理包,使用它可以更加方便虛擬環(huán)境
首先進(jìn)行virtualenvwrapper的安裝
1
$ pip install virtualenvwrapper
剛安裝完后命浴,virtualenvwrapper是不可以直接使用的娄猫,它會(huì)默認(rèn)在/usr/local/bin下生成virtualenvwrapper.sh文件
[圖片上傳中。生闲。媳溺。(14)]
你需要運(yùn)行該文件才行,現(xiàn)在先別急著運(yùn)行該文件碍讯,先看一下文件中寫(xiě)了什么悬蔽,可以使用vim來(lái)查看
可以看見(jiàn),該文件中寫(xiě)好了我們需要做什么配置捉兴,下面按照該文件的提示蝎困,配置好相應(yīng)的環(huán)境
將相應(yīng)的內(nèi)容寫(xiě)入到~/.bashrc中
12
$ echo 'export WORKON_HOME=$HOME/.virtualenvs' >> ~/.bashrc$ echo 'source /usr/local/bin/virtualenvwrapper.sh' >> ~/.bashrc
再運(yùn)行bashrc文件
1
$ source ~/.bashrc
此時(shí)virtualenvwrapper就可以使用了。
通過(guò)下面命令創(chuàng)建一個(gè)虛擬環(huán)境
1
$ mkvirtualenv test2
你會(huì)發(fā)現(xiàn)倍啥,創(chuàng)建完后禾乘,直接就進(jìn)入虛擬環(huán)境了,不再用進(jìn)入相應(yīng)的目錄下手動(dòng)啟動(dòng)activate文件虽缕,非常方便始藕。
同樣可以通過(guò)deactivate推出虛擬環(huán)境,退出后氮趋,可以通過(guò)workon命令查看到已經(jīng)創(chuàng)建的虛擬環(huán)境
1
$ workon
可以看見(jiàn)這里現(xiàn)實(shí)出了我們剛剛創(chuàng)建了test2虛擬環(huán)境,但是卻沒(méi)有顯示直接通過(guò)virtualenv創(chuàng)建的test虛擬環(huán)境
通過(guò)下面命令進(jìn)入相應(yīng)的虛擬環(huán)境
1
$ workon test2
當(dāng)我們不想在使用該虛擬環(huán)境時(shí)伍派,可以通過(guò)下面命令將該虛擬環(huán)境刪除
1
$ rmvirtualenv test2
這里提一下,如果想刪除直接通過(guò)virtualenv命令創(chuàng)建的虛擬環(huán)境剩胁,可以將該虛擬環(huán)境對(duì)于的文件夾直接整個(gè)刪除诉植,該虛擬環(huán)境就從你的計(jì)算機(jī)上移除了。
結(jié)尾
后面的開(kāi)發(fā)摧冀,我們都會(huì)在虛擬環(huán)境中進(jìn)行倍踪。