python多版本控制

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

懶寫(xiě)作

簡(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)行倍踪。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末系宫,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子建车,更是在濱河造成了極大的恐慌扩借,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件缤至,死亡現(xiàn)場(chǎng)離奇詭異潮罪,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)领斥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)嫉到,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人月洛,你說(shuō)我怎么就攤上這事何恶。” “怎么了嚼黔?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵细层,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我唬涧,道長(zhǎng)疫赎,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任碎节,我火速辦了婚禮捧搞,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘狮荔。我一直安慰自己胎撇,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布轴合。 她就那樣靜靜地躺著创坞,像睡著了一般。 火紅的嫁衣襯著肌膚如雪受葛。 梳的紋絲不亂的頭發(fā)上题涨,一...
    開(kāi)封第一講書(shū)人閱讀 51,125評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音总滩,去河邊找鬼纲堵。 笑死,一個(gè)胖子當(dāng)著我的面吹牛闰渔,可吹牛的內(nèi)容都是我干的席函。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼冈涧,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼茂附!你這毒婦竟也來(lái)了正蛙?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤营曼,失蹤者是張志新(化名)和其女友劉穎乒验,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體蒂阱,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡锻全,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了录煤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鳄厌。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖妈踊,靈堂內(nèi)的尸體忽然破棺而出了嚎,到底是詐尸還是另有隱情,我是刑警寧澤响委,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布新思,位于F島的核電站,受9級(jí)特大地震影響赘风,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜纵刘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一邀窃、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧假哎,春花似錦瞬捕、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至惧蛹,卻和暖如春扇救,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背香嗓。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工迅腔, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人靠娱。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓沧烈,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親像云。 傳聞我的和親對(duì)象是個(gè)殘疾皇子锌雀,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 字符集和編碼簡(jiǎn)介 在編程中常陈煜Γ可以見(jiàn)到各種字符集和編碼,包括ASCII,MBCS,Unicode等字符集腋逆。確切的說(shuō)...
    蘭山小亭閱讀 8,487評(píng)論 0 13
  • 編碼問(wèn)題一直困擾著開(kāi)發(fā)人員婿牍,尤其在 Java 中更加明顯,因?yàn)?Java 是跨平臺(tái)語(yǔ)言闲礼,不同平臺(tái)之間編碼之間的切換...
    x360閱讀 2,478評(píng)論 1 20
  • pyenv:一個(gè)簡(jiǎn)單的python版本管理工具牍汹,它能夠讓你改變?nèi)謕ython版本,安裝并同時(shí)啟用多個(gè)版本柬泽,并且可...
    FiveStrong閱讀 2,843評(píng)論 1 3
  • " 生下來(lái)慎菲,才能活下去 " 每天的忙碌奔波讓生活定義成勞碌無(wú)為,每每都在思索生活的意義锨并,生活的本來(lái)面貌到底...
    傲嬌娟子閱讀 171評(píng)論 0 1
  • 碌碌無(wú)為的時(shí)光總是一晃眼就過(guò)了露该,白開(kāi)水一般的日子一天天的流過(guò),今天凌晨昨天晚上我在做什么第煮,今天晚上明天凌晨我又將是...
    綠桃與紅杏閱讀 466評(píng)論 0 0