Pip與Conda到底能混用嗎?
關于pip與conda是否能混用的問題,Anaconda官方早就給出了回答

https://www.anaconda.com/blog/using-pip-in-a-conda-environment
以下結合原文進行了相應修改,旨在盡可能的表述清晰
先說結論,如果conda和pip在相同環(huán)境下摻雜使用,尤其是頻繁使用這兩個工具進行包的安裝,可能會導致環(huán)境狀態(tài)混亂
就像其他包管理器一樣,大部分這些問題均源于有限的能力來管理未安裝的包。通過pip安裝后再運行conda,有可能覆蓋或潛在地破壞通過pip安裝的包。同樣,pip可能會升級或刪除conda安裝的某個包所依賴的包
有一些步驟可以用來避免在使用conda和pip一起時出現(xiàn)問題的環(huán)境破壞。一個可靠的方法是只使用conda包。如果需要conda沒有提供的軟件包,可以使用conda build來創(chuàng)建。對于在PyPI上可用的項目,conda skeleton命令可以生成一個用來創(chuàng)建conda包的配方,幾乎不需要進行修改
https://docs.conda.io/projects/conda-build/en/stable/
但如果環(huán)境涉及大量只能在PyPI上獲得的包,這可能會成為負擔。在這些情況下,最安全的做法是先通過conda安裝所有支持的包后才使用pip安裝不支持的包。此外,應該使用“--upgrade-strategy only-if-needed”參數(shù)運行pip,以防止不必要地升級通過conda安裝的包。這是運行pip時的默認設置,不應更改
如果預計某項目需要混用conda與pip,最好的做法是將此安裝放入一個專門的conda環(huán)境中,以保護其他環(huán)境免受pip可能會進行的任何修改,因為conda環(huán)境是獨立的,允許不同版本的包存在
https://conda.io/docs/user-guide/tasks/manage-environments.html
在conda環(huán)境中,盡可能使用硬鏈接而不是復制文件。如果安裝了相同的一組包,每個新的conda環(huán)境將只需要少量額外的磁盤空間。許多用戶依賴于由安裝Anaconda或Miniconda創(chuàng)建的“base” conda環(huán)境,如果這個環(huán)境混雜著pip和conda安裝的包,將會更難恢復。另一方面,創(chuàng)建單獨的conda環(huán)境允許隨時整個刪除和重新創(chuàng)建環(huán)境,而不會影響核心的conda功能
在conda環(huán)境中使用pip安裝包時,conda并不會察覺到這些變更,并存在破壞環(huán)境的風險。一個可靠的方法是創(chuàng)建一個新的環(huán)境,并先通過conda安裝需要的包,再運行pip。再次強調,主要問題是pip的“狀態(tài)性(或關聯(lián)性)”——安裝包的順序會關聯(lián)更多的狀態(tài),這將使事情更難以正常工作

對于經常需要重建的環(huán)境,最好的做法是將conda和pip包要求存儲在文本文件中。可以通過--file參數(shù)將包要求提供給conda,通過-r或--requirement(關于requirement的一些總結其實早就寫好了,一直躺在我的草稿箱中)參數(shù)提供給pip

一個包含conda和pip要求的文件可以導出或通過conda env命令來控制環(huán)境。這兩種方法的好處是,描述環(huán)境的文件可以方便進行版本控制以及便于他人共享環(huán)境
Anaconda非常清楚結合pip和conda可能會遇到的困難。我們希望設置數(shù)據科學環(huán)境的過程盡可能簡單。這就是為什么我們一直在向conda的下一個版本添加新功能,以簡化這個過程。雖然還處于測試階段,但conda 4.6.0允許conda考慮pip安裝的包,并根據需要替換這些包或滿足現(xiàn)有包的依賴關系。我們仍在測試這些新功能,但預計在不久的將來,conda和pip之間的交互將得到很大改善。
總結
在使用conda后再使用pip
使用conda盡可能多地先安裝支持的包,再使用pip
使用“--upgrade-strategy only-if-needed”(默認設置)運行pip
不要使用“--user”參數(shù),避免所有“用戶”安裝
使用conda進行環(huán)境隔離
創(chuàng)建一個conda環(huán)境來隔離pip所做的任何更改
由于硬鏈接特性,不同環(huán)境下重復安裝包不會復制文件,環(huán)境所占空間很小
應注意避免在默認的 conda 環(huán)境下(如base)運行 pip
如果需要對環(huán)境進行更改,請重新創(chuàng)建環(huán)境
一旦在conda環(huán)境中使用pip安裝包,conda無法定位環(huán)境發(fā)生變更
要安裝額外的conda包,最好重新創(chuàng)建環(huán)境
將conda和pip相關的包要求以文本文件形式存儲
通過--file參數(shù)將包要求提供給conda
通過-r或--requirement參數(shù)提供給pip
conda env將基于包含conda和pip需求的文件導出或創(chuàng)建環(huán)境