关于conda和anaconda不可不知的误解和事实——conda必知必会
2012年發(fā)布的跨平臺(tái)包管理軟件conda,是在數(shù)據(jù)分析界和Numpy和Scipy一樣受歡迎的python工具。但是普通程序員平時(shí)只是會(huì)使用conda安裝一些第三方包, 對(duì)它從哪里來,它是什么,和它要到哪里去所知甚少。今天我們就要講一下關(guān)于conda和anaconda不可不知的誤解和事實(shí)——conda必知必會(huì)的那些事實(shí)。
誤解 #1:Conda是python的一個(gè)發(fā)行版,不是一個(gè)包管理器。
事實(shí): Conda是一個(gè)包管理器;Anaconda才是一個(gè)python發(fā)行版。雖然conda是用Anaconda打包的, 但是它們兩個(gè)的目標(biāo)是完全不同的。
軟件發(fā)行版是在系統(tǒng)上提前編譯和配置好的軟件包集合, 裝好了后就可以直接用。包管理器是自動(dòng)化軟件安裝,更新,卸載的一種工具。Conda,有命令”conda install”, “conda update”, “conda remove”, 所以很明顯, conda是包管理器。
再來說說,?Anaconda?和?Miniconda. Anaconda發(fā)行版會(huì)預(yù)裝很多pydata生態(tài)圈里的軟件,而Miniconda是最小的conda安裝環(huán)境, 一個(gè)干凈的conda環(huán)境。
但是,conda和Anaconda沒有必然關(guān)系, 你可以不安裝Anaconda的同時(shí), 使用conda安裝和管理軟件。
誤解 #2: Conda是一個(gè)python包管理器
事實(shí):Conda是一個(gè)通用的包管理器,當(dāng)初設(shè)計(jì)來管理任何語言的包。所以用來管理python包當(dāng)然也是綽綽有余。
$ conda search –canonical | grep -v ‘py\d\d’
這句命令可以幫你找出不是 pip和virtualenv可以管理的python包,而conda可以管理
誤解 #3: Conda 和 pip 是直接競爭關(guān)系
事實(shí):Conda 和 pip 目標(biāo)并不相同, 只有小部分子集有交集有競爭關(guān)系:比如python包的安裝和環(huán)境隔離。?
一句話就可以看出區(qū)別:
pip可以允許你在任何環(huán)境中安裝python包,而conda允許你在conda環(huán)境中安裝任何語言包(包括c語言或者python)。
如果我們只是關(guān)注python包安裝,conda和pip也是為不同用戶和不同目標(biāo)定制的。如果你想在一個(gè)已有系統(tǒng)快速管理python包,那你應(yīng)該選擇pip,因?yàn)閏onda應(yīng)該在conda環(huán)境中使用,而pip鼓勵(lì)在任何環(huán)境中使用 。而如果,你想要讓許多依賴庫一起很好地工作(比如數(shù)據(jù)分析中的Numpy,scipy,Matplotlib等等)那你就應(yīng)該使用conda,conda很好地整合了包之間的互相依賴。
誤解 #4: 使用conda首先是不負(fù)責(zé)任并且會(huì)引起分歧的
事實(shí):Conda作者多年來用python標(biāo)準(zhǔn)創(chuàng)造conda,只有在非常清晰合理的時(shí)候, 才使用其他工具。
你可能會(huì)問,我相信conda是遵循python標(biāo)準(zhǔn)的,但是它們?yōu)槭裁雌查_pip自己去造一套包管理器呢?為什么他們不直接去pip團(tuán)隊(duì)貢獻(xiàn)想法呢?
事實(shí)上,一開始conda那伙人是想在pip社區(qū)貢獻(xiàn)想法和代碼的,但是像numpy,scipy這樣對(duì)底層c庫有復(fù)雜依賴的包管理需求,真的不多,所以社區(qū)不接受這樣的不常有的需求。所以,他們只能自己去造conda包管理器了。
誤解 #5: conda不能和virtualenv一起使用,所以它對(duì)我的工作沒用
事實(shí)上:你可以在virtualenv環(huán)境下安裝conda,但是最好用conda自己的環(huán)境工具,這樣會(huì)和pip有更好的兼容性
你可以在virtualenv里面安裝conda:
$ virtualenv test_conda$ source test_conda/bin/activate$ pip install conda$ conda install numpy也可以在conda中造虛擬環(huán)境:
$ conda create -n yourenvname python=x.x anaconda $ source activate yourenvname誤解 #6: 現(xiàn)在pip用wheels了,conda沒什么用了
事實(shí):wheels只是解決了conda試圖克服的許多困難中的一個(gè), conda二進(jìn)制編排還是有很多wheels沒有的優(yōu)勢(shì)?
wheels和conda都解決了預(yù)編譯的代碼安裝問題(不僅僅是源代碼安裝)。但是wheel沒有conda的依賴處理能力,wheels只能跟蹤python代碼的依賴關(guān)系,conda可以跟蹤很多c代碼的依賴關(guān)系,這為許多用numpy和scipy做科學(xué)計(jì)算優(yōu)化的科學(xué)家省了不少心。
誤解 #7: conda不是開源的;它是被盈利公司掌控的,如果有一天公司想收費(fèi)了,那你就得付錢
Reality: conda (the package manager and build system) is 100% open-source, and Anaconda (the distribution) is nearly there as well.
Anaconda和conda都是standard BSD license開源標(biāo)準(zhǔn)。如果你還不放心,用pip install conda吧,這是完全開源的。
誤解 #8: Conda 軟件包本身都是閉源的吧?
事實(shí): 雖然conda默認(rèn)渠道沒有完全開源,但是有一個(gè)社區(qū)牽頭的conda-forge,它會(huì)推動(dòng)conda的包和發(fā)行版完全開源。
誤解 #9: 但是,如果Continuum Analytics公司倒閉,conda就不會(huì)存活了吧??
事實(shí): conda沒有和Continuum Analytics公司有很多牽扯;公司為社區(qū)免費(fèi)提供支持服務(wù),所有軟件都有負(fù)責(zé)人,而不是公司全權(quán)負(fù)責(zé)。
誤解 #10: 每個(gè)人都應(yīng)該拋棄(conda | pip)去用(pip | conda) !
事實(shí): pip 和 conda 是為不同目的存在的,我們應(yīng)該更加關(guān)注怎么同時(shí)用好這兩個(gè)工具,而不是只用一個(gè)
?
參考文獻(xiàn):
https://jakevdp.github.io/blog/2016/08/25/conda-myths-and-misconceptions/
總結(jié)
以上是生活随笔為你收集整理的关于conda和anaconda不可不知的误解和事实——conda必知必会的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用linux集成电路版图设计,集成电路版
- 下一篇: android hud sdk,Andr