最近在學(xué)習(xí)python,發(fā)現(xiàn)在本地搭建python環(huán)境的時(shí)候,要是想要同時(shí)搭建不同python版本的環(huán)境,就比較麻煩,很容易就出現(xiàn)沖突了,很是頭疼。然后光明就出現(xiàn)這山重水復(fù)疑無路的時(shí)候,同事給我推薦了包管理以及環(huán)境管理神器:Anaconda。
說明:建議你在自己的電腦上將下面的步驟親自跟著敲一遍。雖然你不一定能一次性把這些命令全部記住,但是不用擔(dān)心,我們沒必要把所有的命令都一次性全部記住,隨著我們使用它們的頻率越來越高,就會(huì)漸漸的都記在腦海里了。實(shí)在記不住的,要用的時(shí)候再來這里查也是可以的?,F(xiàn)在我們最重要要做到的就是跟著下面步驟操作并理解了每一步是干啥的。
Anaconda是“蟒蛇”的意思,Nicki Minaj妮琪·米娜有首歌就叫《Anaconda》,表達(dá)像蟒蛇一樣妖嬈、性感的身體。
所以我們看下面Anaconda的官方圖標(biāo)就像一個(gè)首尾相互咬住的“蟒蛇”.
三、為什么需要Anaconda?
我已在本地安裝了 Python,那我為啥還需要 Anaconda?有如下三個(gè)原因
Anaconda 中集成了很多常用數(shù)據(jù)開發(fā)包,它附帶了 Python、conda以及 150 多個(gè)其他包及其依賴項(xiàng)。
包管理
Anaconda 是在 conda(一個(gè)包和環(huán)境管理器)上發(fā)展出來的。
在數(shù)據(jù)分析中,我們會(huì)用到很多第三方包,而conda可以很好的幫助我們?cè)谟?jì)算機(jī)上管理這些包,包括安裝、更新和卸載包。
環(huán)境管理
比如你在一個(gè)項(xiàng)目中用了 Python 2,而另一個(gè)項(xiàng)目中使用Python 3,如果直接同時(shí)安裝兩個(gè)版本的Python可能會(huì)造成許多錯(cuò)誤和混亂。這時(shí) conda就可以幫助我們?yōu)椴煌捻?xiàng)目建立不一樣的運(yùn)行環(huán)境。
還有很多項(xiàng)目使用的包版本不同,例如我們不可能同時(shí)安裝兩個(gè) Numpy 版本,而conda可以幫我們?yōu)槊總€(gè) Numpy 版本創(chuàng)建一個(gè)環(huán)境,然后不同版本的項(xiàng)目在對(duì)應(yīng)環(huán)境中工作。
Anaconda 可用于多個(gè)平臺(tái)( Mac OS X 、Windows和 Linux)。我們可以在它的官網(wǎng)找到安裝程序以及安裝說明。根據(jù)操作系統(tǒng)的位數(shù)(是32位還是64位)選擇對(duì)應(yīng)的版本下載。(Anaconda已不再支持Windows XP)
官網(wǎng)地址:https://www.anaconda.com/download/
如果不能忍受官網(wǎng)地址下載太慢,可以在我公眾號(hào):[阿豪聊干貨],中回復(fù)“anaconda”從網(wǎng)盤下載.Anaconda 的安裝包比較大(約 500 MB),因?yàn)樗綆Я?Python 中最常用的數(shù)據(jù)開發(fā)包。
若你的計(jì)算機(jī)上已經(jīng)安裝了 Python,安裝Anaconda不會(huì)對(duì)你的計(jì)算機(jī)有任何影響。實(shí)際上,程序和腳本使用的默認(rèn) Python 就是 Anaconda 集成的 Python。
注意:若你的系統(tǒng)是windows 10,在安裝Anaconda的時(shí)候,要右擊安裝軟件→選擇以管理員的身份運(yùn)行。
安裝完成后,在windows上按下圖打開 Anaconda Prompt ( Mac 下的終端就集成了Anaconda Prompt),后文我們會(huì)將Anaconda Prompt統(tǒng)一稱為“終端”。
注意:若你的系統(tǒng)是windows 10,請(qǐng)按照下圖打開Anaconda Prompt
若你是win10系統(tǒng),并且沒有按上圖打開,在控制臺(tái)中會(huì)報(bào)如下錯(cuò)誤信息:
若安裝后在Anaconda Prompt中無法使用Conda命令,解決方法傳送門: https://zhuanlan.zhihu.com/p/34337889
若終端中可以使用conda命令,請(qǐng)接著進(jìn)行下面操作:
初次安裝好的軟件包版本一般都比較舊,為了避免后來使用出現(xiàn)不必要的異常,我們需要首先更新下所有包。在終端輸入如下命令:
接著在提示是否更新的時(shí)候輸入 y繼續(xù)進(jìn)行更新。配置下載包使用清華倉(cāng)庫(kù)鏡像,這樣更新會(huì)快一些:
倉(cāng)庫(kù)地址:https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
若以上命令執(zhí)行出錯(cuò),解決辦法傳送門:https://zhuanlan.zhihu.com/p/34337889
五、怎么管理包?
安裝包
conda install package_name
例如,要安裝 numpy,在終端中輸入:
我們還可以同時(shí)安裝多個(gè)包。類似 conda install numpy pandas 命令會(huì)同時(shí)安裝所有指定的這些包。
conda 會(huì)自動(dòng)為我們安裝包依賴項(xiàng)。例如,scipy 依賴于 numpy,因?yàn)樗枰?numpy包。所以若我們安裝 scipy,則 conda 還會(huì)自動(dòng)幫我們安裝 numpy包(已安裝的話不會(huì)重復(fù)安裝)。
卸載包
conda remove package_name
該命令中的package_name是指我們要卸載包名稱,例如我們想卸載numpy包:
更新包
conda update package_name
如果我們想更新環(huán)境中所有包(這樣做經(jīng)常很有必要)使用如下命令:
列出所有已安裝的包
conda list
查找包
如果我們不知道要找的包的全名稱,我么可以嘗試使用 conda search search_term 進(jìn)行搜索。比如,我想安裝numpy,但我不知道確切的包名稱。我們可以這樣嘗試:
我們知道conda 可以為不同的項(xiàng)目建立不一樣的運(yùn)行環(huán)境,首先你要安裝nb_conda用于將notebook自動(dòng)關(guān)聯(lián)到nb_conda的環(huán)境:
conda install nb_conda
并在提示是否更新的時(shí)候輸入 y 讓安裝繼續(xù)。
環(huán)境創(chuàng)建
命令中,envName 是我們?cè)O(shè)置環(huán)境的名稱(-n 是說該選項(xiàng)后的envName是我們要?jiǎng)?chuàng)建環(huán)境的名稱),package_name 是我們要安裝到將要?jiǎng)?chuàng)建的環(huán)境中的包名稱。
比如,我們要?jiǎng)?chuàng)建環(huán)境名稱為 py3 的環(huán)境并在其中安裝 python 3.5,使用如下命令 :
conda create -n py3 python=3.5
創(chuàng)建環(huán)境時(shí)我們可以指定要安裝在環(huán)境中的 Python 版本
當(dāng)我們同時(shí)使用 Python 2.x 和 Python 3.x 中的代碼時(shí)這很有用。這就要?jiǎng)?chuàng)建具有特定版本 Python 的環(huán)境,比如創(chuàng)建環(huán)境名稱為py3,并安裝最新版本的Python3命令:
當(dāng)然我們也可以這樣創(chuàng)建環(huán)境名稱為py2,并在該環(huán)境中安裝最新版本的Python2:
conda create -n py2 python=2
因?yàn)槲覀兊捻?xiàng)目要求不同,有時(shí)會(huì)用Python2,還有時(shí)會(huì)用Python3。所以我們需要在自己計(jì)算機(jī)上創(chuàng)建這兩個(gè)環(huán)境,并分別取類似這樣的環(huán)境名稱:py2,py3。這樣我們就可以根據(jù)不同的項(xiàng)目輕松切換不同版本的python。
如果我們要安裝特定版本(例如 Python 3.5),請(qǐng)使用:
進(jìn)入環(huán)境
在 OSX/Linux 上我們使用 source activate my_env_name 進(jìn)入環(huán)境。在 Windows 上我們使用 activate my_env_name進(jìn)入環(huán)境。
進(jìn)入環(huán)境后,我們會(huì)在終端提示符中看到當(dāng)前環(huán)境名稱,下圖說明我們進(jìn)入py3的環(huán)境(這里的py3是我們上面創(chuàng)建環(huán)境時(shí)自己起的名稱,你可以隨意起自己喜歡的名字)。
進(jìn)入環(huán)境后,我們用conda list 來查看環(huán)境中默認(rèn)安裝的幾個(gè)包:
在對(duì)應(yīng)環(huán)境中安裝其他包的命令與前面一樣:
conda install package_name
不過,這種情況下我們安裝的特定包僅在該環(huán)境里才能用。
退出環(huán)境
在 OSX/Linux 上的終端中輸入:
Windows 上在終端中輸入:
deactivate
共享環(huán)境
共享環(huán)境是工作中非常有用,它能讓其他開發(fā)人員一鍵安裝所有你在代碼中使用的包,并且還能確保這些包的版本正確和你使用的一致。例如你開發(fā)了一個(gè)電商平臺(tái)數(shù)據(jù)分析系統(tǒng),你要把項(xiàng)目提交給負(fù)責(zé)項(xiàng)目部署的王五讓他來給你部署項(xiàng)目,但是這貨并不知道你開發(fā)時(shí)都使用了哪些依賴包及python版本,這可如何是好?
這時(shí)候你就可以在當(dāng)前的環(huán)境的終端中執(zhí)行 conda env export -f environment.yml 或者conda env export > environment.yml命令將當(dāng)前的環(huán)境以及依賴包等描述保存到指定的YAML文件(包括Pyhton版本以及所有依賴包的名稱和版本)。
命令中的前半部分部分 conda env export 用于輸出環(huán)境中的所有包的名稱和版本信息(包括 Python 版本)。這樣在我們指定的路徑下可以看到導(dǎo)出的環(huán)境文件
我們?cè)?GitHub 等開源倉(cāng)庫(kù)上共享代碼時(shí),最好以這樣的方式同時(shí)創(chuàng)建環(huán)境文件并將其上傳到代碼庫(kù)中。這可以讓別人很輕松地安裝你的代碼及其所有依賴項(xiàng)。
導(dǎo)出環(huán)境文件后,在其他電腦環(huán)境中怎么使用呢?
首先我們?cè)诮K端中進(jìn)入你的環(huán)境,比如activate py3,然后再使用如下命令更新我們的環(huán)境:conda env update -f /path/to/environment.yml
對(duì)于那些兵不使用 conda 的用戶,我通常還可以使用 pip freeze > environment.txt 導(dǎo)出一個(gè)txt文件并將其上傳到代碼庫(kù)中。操作傳送門:https://pip.pypa.io/en/stable/reference/pip_freeze/
舉個(gè)例子我們可能更容易理解這個(gè)使用場(chǎng)景:
首先,我們?cè)谧约弘娔X上的conda中將自己項(xiàng)目的環(huán)境及依賴導(dǎo)出成environment.txt 文件:
然后我們將該文件上傳到項(xiàng)目的代碼庫(kù)中,項(xiàng)目其他開發(fā)人員在他的電腦上即使沒有安裝conda也能使用這個(gè)文件來安裝和我們一樣的開發(fā)環(huán)境,他只需要在自己的電腦上進(jìn)入python命令環(huán)境,而后運(yùn)行如下命令就可以安裝該項(xiàng)目所依賴的包:
其中/path/requirements.txt是此文件在你電腦種的實(shí)際路徑。
列出環(huán)境
當(dāng)我們創(chuàng)建的環(huán)境越來越多,我們有時(shí)候會(huì)忘記自己創(chuàng)建的環(huán)境名稱,這時(shí)我們用 conda env list 命令就可以列出所有已經(jīng)創(chuàng)建的環(huán)境。
我們能看到如下環(huán)境列表,而你當(dāng)前所在環(huán)境的旁邊會(huì)有一個(gè)星號(hào)。默認(rèn)的環(huán)境(即當(dāng)我們不選定環(huán)境時(shí)使用的環(huán)境)名稱為 root。
刪除環(huán)境
如果我們不再使用某個(gè)環(huán)境,使用如下命令刪除指定的環(huán)境:(在這里環(huán)境名為 envName)
conda env remove -n envName
最后再次說明下,我們千萬不能被上面的命令嚇到。雖然命令很多,但我們用的多了就自然記住了。我們現(xiàn)在要做的只是跟著上面步驟操作下,重要的是理解每一步是干啥的。回頭忘記了可以再查這個(gè)文檔。
conda的官方文檔:https://conda.io/docs/user-guide/tasks/index.html
以上就是Anaconda的全部入門內(nèi)容了,相信有了它,在我們學(xué)習(xí)python的路上,我們一定能披荊斬棘,勇往直前!加油,各位~
聯(lián)系客服