anaconda使用

如何使用Anaconda來(lái)管理 Python 所用的包和環(huán)境


Anaconda 能讓你輕松安裝在數(shù)據(jù)科學(xué)工作中經(jīng)常使用的包。你還將使用它創(chuàng)建虛擬環(huán)境,以便更輕松地處理多個(gè)項(xiàng)目督惰。Anaconda 簡(jiǎn)化了我的工作流程采呐,并且解決了我在處理包和多個(gè) Python 版本時(shí)遇到的大量問題。

Anaconda 實(shí)際上是一個(gè)軟件發(fā)行版凌净,它附帶了conda悲龟、Python 和 150 多個(gè)科學(xué)包及其依賴項(xiàng)。應(yīng)用程序conda是包和環(huán)境管理器冰寻。


使用conda來(lái)管理包和環(huán)境能減少將來(lái)在處理你要使用的各種庫(kù)時(shí)遇到的問題须教。


管理

包管理器用于在計(jì)算機(jī)上安裝庫(kù)和其他軟件。你可能已經(jīng)熟悉 pip斩芭,它是 Python 庫(kù)的默認(rèn)包管理器轻腺。conda 與 pip 相似,不同之處是可用的包以數(shù)據(jù)科學(xué)包為主划乖,而 pip 適合一般用途贬养。但是,conda并非像 pip 那樣專門適用于 Python琴庵,它也可以安裝非 Python 的包误算。它是適用于任何軟件堆棧的包管理器。也就是說细卧,并非所有的 Python 庫(kù)都能通過 Anaconda 發(fā)行版和 conda 獲得尉桩。在使用 conda 的同時(shí),你仍可以并且仍將使用 pip 來(lái)安裝包贪庙。

Conda 安裝了預(yù)編譯的包蜘犁。例如,Anaconda 發(fā)行版附帶了使用MKL 庫(kù)編譯的 Numpy止邮、Scipy 和 Scikit-learn这橙,從而加快了各種數(shù)學(xué)運(yùn)算的速度。這些包由發(fā)行版的貢獻(xiàn)者維護(hù)导披,這意味著它們通常滯后于新版本屈扎。但是,由于有人需要為許多系統(tǒng)構(gòu)建這些包撩匕,因此鹰晨,它們往往更為穩(wěn)定,而且更便于你使用。

環(huán)境

除了管理包之外模蜡,conda 還是虛擬環(huán)境管理器漠趁。它類似于另外兩個(gè)很流行的環(huán)境管理器,即virtualenvpyenv忍疾。

環(huán)境能讓你分隔你要用于不同項(xiàng)目的包闯传。你常常要使用依賴于某個(gè)庫(kù)的不同版本的代碼。例如卤妒,你的代碼可能使用了 Numpy 中的新功能甥绿,或者使用了已刪除的舊功能。實(shí)際上则披,不可能同時(shí)安裝兩個(gè) Numpy 版本共缕。你要做的應(yīng)該是,為每個(gè) Numpy 版本創(chuàng)建一個(gè)環(huán)境收叶,然后在適用于項(xiàng)目的環(huán)境中工作骄呼。

在應(yīng)對(duì) Python 2 和 Python 3 時(shí),此問題也會(huì)常常發(fā)生判没。你可能會(huì)使用在 Python 3 中不能運(yùn)行的舊代碼,以及在 Python 2 中不能運(yùn)行的新代碼隅茎。同時(shí)安裝兩個(gè)版本可能會(huì)造成許多混亂和錯(cuò)誤澄峰。而創(chuàng)建獨(dú)立的環(huán)境會(huì)好很多。

也可以將環(huán)境中的包的列表導(dǎo)出為文件辟犀,然后將該文件與代碼包括在一起俏竞。這能讓其他人輕松加載代碼的所有依賴項(xiàng)。pip 提供了類似的功能堂竟,即pip freeze > requirements.txt魂毁。



在 Windows 上,會(huì)隨 Anaconda 一起安裝一批應(yīng)用程序:

Anaconda Navigator出嘹,它是用于管理環(huán)境和包的 GUI

Anaconda Prompt 終端席楚,它可讓你使用命令行界面來(lái)管理環(huán)境和包

Spyder,它是面向科學(xué)開發(fā)的 IDE

管理包

安裝了 Anaconda 之后税稼,管理包是相當(dāng)簡(jiǎn)單的烦秩。要安裝包,請(qǐng)?jiān)诮K端中鍵入conda install package_name郎仆。例如只祠,要安裝 numpy,請(qǐng)鍵入conda install numpy扰肌。

你還可以同時(shí)安裝多個(gè)包抛寝。類似conda install numpy scipy pandas的命令會(huì)同時(shí)安裝所有這些包。還可以通過添加版本號(hào)(例如conda install numpy=1.10)來(lái)指定所需的包版本。

Conda 還會(huì)自動(dòng)為你安裝依賴項(xiàng)盗舰。例如猴凹,scipy依賴于numpy,因?yàn)樗褂貌⑿枰猲umpy岭皂。如果你只安裝scipy(conda install scipy)郊霎,則 conda 還會(huì)安裝numpy(如果尚未安裝的話)。

大多數(shù)命令都是很直觀的爷绘。要卸載包书劝,請(qǐng)使用conda remove package_name。要更新包土至,請(qǐng)使用conda update package_name购对。如果想更新環(huán)境中的所有包(這樣做常常很有用),請(qǐng)使用conda update --all陶因。最后骡苞,要列出已安裝的包,請(qǐng)使用前面提過的conda list楷扬。

如果不知道要找的包的確切名稱解幽,可以嘗試使用conda search search_term進(jìn)行搜索。例如烘苹,我知道我想安裝Beautiful Soup躲株,但我不清楚確切的包名稱。因此镣衡,我嘗試執(zhí)行conda search beautifulsoup霜定。



管理環(huán)境

如前所述,可以使用 conda 創(chuàng)建環(huán)境以隔離項(xiàng)目廊鸥。要?jiǎng)?chuàng)建環(huán)境望浩,請(qǐng)?jiān)诮K端中使用conda create -n env_name list of packages。在這里惰说,-n env_name設(shè)置環(huán)境的名稱(-n是指名稱)磨德,而list of packages是要安裝在環(huán)境中的包的列表。例如助被,要?jiǎng)?chuàng)建名為my_env的環(huán)境并在其中安裝 numpy剖张,請(qǐng)鍵入conda create -n my_env numpy。


創(chuàng)建環(huán)境時(shí)揩环,可以指定要安裝在環(huán)境中的 Python 版本搔弄。這在你同時(shí)使用 Python 2.x 和 Python 3.x 中的代碼時(shí)很有用。要?jiǎng)?chuàng)建具有特定 Python 版本的環(huán)境丰滑,請(qǐng)鍵入類似于conda create -n py3 python=3或conda create -n py2 python=2的命令顾犹。實(shí)際上倒庵,我在我的個(gè)人計(jì)算機(jī)上創(chuàng)建了這兩個(gè)環(huán)境。我將它們用作與任何特定項(xiàng)目均無(wú)關(guān)的通用環(huán)境炫刷,以處理普通的工作(可輕松使用每個(gè) Python 版本)擎宝。這些命令將分別安裝 Python 3 和 2 的最新版本。要安裝特定版本(例如 Python 3.3)浑玛,請(qǐng)使用conda create -n py python=3.3绍申。


進(jìn)入環(huán)境

創(chuàng)建了環(huán)境后,在 OSX/Linux 上使用source activate my_env進(jìn)入環(huán)境顾彰。在 Windows 上极阅,請(qǐng)使用activate my_env。


進(jìn)入環(huán)境后涨享,你會(huì)在終端提示符中看到環(huán)境名稱筋搏,它類似于(my_env) ~ $。環(huán)境中只安裝了幾個(gè)默認(rèn)的包厕隧,以及你在創(chuàng)建它時(shí)安裝的包奔脐。可以使用conda list檢查這一點(diǎn)吁讨。在環(huán)境中安裝包的命令與前面一樣:conda install package_name髓迎。不過,這次你安裝的特定包僅在你進(jìn)入環(huán)境后才可用挡爵。要離開環(huán)境竖般,請(qǐng)鍵入source deactivate(在 OSX/Linux 上)。在 Windows 上茶鹃,請(qǐng)使用deactivate。



保存和加載環(huán)境

共享環(huán)境這項(xiàng)功能確實(shí)很有用艰亮,它能讓其他人安裝你的代碼中使用的所有包闭翩,并確保這些包的版本正確∑#可以使用conda env export > environment.yaml將包保存為YAML疗韵。第一部分conda env export寫出環(huán)境中的所有包(包括 Python 版本)。

上圖可以看到列出了環(huán)境的名稱和所有依賴項(xiàng)及其版本侄非。導(dǎo)出命令的第二部分> environment.yaml將導(dǎo)出的文本寫入到 YAML 文件environment.yaml中〗锻簦現(xiàn)在可以共享此文件,而且其他人能夠創(chuàng)建和你用于項(xiàng)目相同的環(huán)境逞怨。

要通過環(huán)境文件創(chuàng)建環(huán)境者疤,請(qǐng)使用conda env create -f environment.yaml。這會(huì)創(chuàng)建一個(gè)新環(huán)境叠赦,而且它具有在environment.yaml中列出的同一庫(kù)驹马。



列出環(huán)境

如果忘記了環(huán)境的名稱(我有時(shí)會(huì)這樣),可以使用conda env list列出你創(chuàng)建的所有環(huán)境。你會(huì)看到環(huán)境的列表糯累,而且你當(dāng)前所在環(huán)境的旁邊會(huì)有一個(gè)星號(hào)算利。默認(rèn)的環(huán)境(即當(dāng)你不在環(huán)境中時(shí)使用的環(huán)境)名為root。

刪除環(huán)境

如果你不再使用某些環(huán)境泳姐,可以使用conda env remove -n env_name刪除指定的環(huán)境(在這里名為env_name)效拭。




最佳做法

使用環(huán)境

對(duì)我?guī)椭艽蟮囊稽c(diǎn)是,我的 Python 2 和 Python 3 具有獨(dú)立的環(huán)境胖秒。我使用了conda create -n py2 python=2和conda create -n py3 python=3創(chuàng)建兩個(gè)獨(dú)立的環(huán)境缎患,即py2和py3。現(xiàn)在扒怖,我的每個(gè) Python 版本都有一個(gè)通用環(huán)境较锡。在所有這些環(huán)境中,我都安裝了大多數(shù)標(biāo)準(zhǔn)的數(shù)據(jù)科學(xué)包(numpy盗痒、scipy蚂蕴、pandas 等)。

我還發(fā)現(xiàn)俯邓,為我從事的每個(gè)項(xiàng)目創(chuàng)建環(huán)境很有用骡楼。這對(duì)于與數(shù)據(jù)不相關(guān)的項(xiàng)目(例如使用 Flask 開發(fā)的 Web 應(yīng)用)也很有用。例如稽鞭,我為我的個(gè)人博客(使用Pelican)創(chuàng)建了一個(gè)環(huán)境鸟整。

共享環(huán)境

在 GitHub 上共享代碼時(shí),最好同樣創(chuàng)建環(huán)境文件并將其包括在代碼庫(kù)中朦蕴。這能讓其他人更輕松地安裝你的代碼的所有依賴項(xiàng)篮条。對(duì)于不使用 conda 的人,我通常還會(huì)使用pip freeze(在此處了解詳情)將一個(gè) piprequirements.txt文件包括在內(nèi)吩抓。

了解更多信息

要詳細(xì)了解 conda 和它如何融入到 Python 生態(tài)系統(tǒng)中涉茧,請(qǐng)查看這篇由 Jake Vanderplas 撰寫的文章:Conda myths and misconceptions(有關(guān) conda 的迷思和誤解)。此外疹娶,有空也可以參考這篇conda 文檔伴栓。

最后編輯于
?著作權(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)離奇詭異,居然都是意外死亡锹安,警方通過查閱死者的電腦和手機(jī)短荐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門倚舀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人忍宋,你說我怎么就攤上這事痕貌。” “怎么了糠排?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵舵稠,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我入宦,道長(zhǎng)哺徊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任乾闰,我火速辦了婚禮落追,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘涯肩。我一直安慰自己轿钠,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布病苗。 她就那樣靜靜地躺著疗垛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪硫朦。 梳的紋絲不亂的頭發(fā)上贷腕,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音咬展,去河邊找鬼泽裳。 笑死,一個(gè)胖子當(dāng)著我的面吹牛破婆,可吹牛的內(nèi)容都是我干的诡壁。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼荠割,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了旺矾?” 一聲冷哼從身側(cè)響起蔑鹦,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎箕宙,沒想到半個(gè)月后嚎朽,有當(dāng)?shù)厝嗽跇淞掷锇l(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
  • 文/蒙蒙 一撬码、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧版保,春花似錦呜笑、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至袖裕,卻和暖如春曹抬,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背急鳄。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工谤民, 沒想到剛下飛機(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)容

  • Anaconda使用總結(jié) 原文出處:2016.7.19 PeterYuan 序 Python易用,但用好卻不易岩馍,其...
    MiracleJQ閱讀 2,205評(píng)論 0 11
  • Anaconda使用總結(jié) 2016.7.19 PeterYuan 序 Python易用碉咆,但用好卻不易,其中比較頭疼...
    PeterYuan閱讀 311,824評(píng)論 36 347
  • 前言 Python易用簡(jiǎn)單方便,而且工具庫(kù)十分的強(qiáng)大,很多機(jī)器學(xué)習(xí)工具庫(kù)都提供python API蛀恩,可是老話說的好...
    斐波那契的數(shù)字閱讀 3,183評(píng)論 0 1
  • 1. 介紹 任何語(yǔ)言的包疫铜,依賴和環(huán)境管理:Python,R双谆,Ruby壳咕,Lua席揽,Scala,Java谓厘,Javascr...
    Himryang閱讀 74,329評(píng)論 6 67
  • 獲取結(jié)尾兩個(gè)字符子串: let sessionId = "this is a test" let index = ...
    通哥閱讀 131評(píng)論 0 0