學習AI一開始想必會接觸到Python,而接觸到Python時,有些人可能會先碰上Pip、Pip3、Conda和Anaconda等套件管理相關名詞的小困擾(像我),這次打算把這四者的關係弄清楚一些,希望也能幫助到讀者!
在混合使用conda和pip時,建議先用conda安裝主要套件,再用pip補充不在conda倉庫中的套件,主要是基於以下幾個原因:
1.conda更擅長處理複雜依賴
- conda不僅管理Python套件,還能處理非Python的依賴(如底層C語言庫、編譯器等),確保所有套件和它們的依賴版本之間相容。例如,安裝numpy時,conda會同時確保相關的線性代數庫(如MKL)正確安裝並匹配。
- pip只專注於Python套件,不會主動解決非Python依賴。如果套件需要特定的外部庫,就會需要手動處理。
2.conda環境的完整性優先
- conda希望環境中的套件盡可能來自它的套件倉庫,並由它統一管理。這樣當你導出環境(condaenvexport)或在另一台機器上重建環境時,能確保一致性。
- 如果先用pip安裝大量套件,後續用conda安裝時,conda可能會因為檢測到已有套件而跳過某些依賴,或強行覆蓋pip安裝的版本,導致環境混亂。
3.避免版本衝突
- conda從Anaconda倉庫(或conda-forge)下載套件,這些套件通常經過測試,版本間相容性較高。
- pip從PyPI下載,套件版本可能更新更快,但也可能與conda倉庫中的版本不匹配。
- 如果先用pip安裝一個套件(例如numpy 1.23),而後用conda安裝另一個依賴舊版numpy的套件(例如需要numpy 1.21),conda可能無法正確解決衝突,甚至報錯。
4.實務經驗
- Anaconda官方和許多開發者社群都推薦先用conda安裝主要套件,再用pip補充不在conda倉庫中的套件,因為反過來操作(先pip後conda)常導致環境損壞,需要重建。
建議先conda後pip是為了讓conda掌控環境的核心結構,利用它依賴套件解析能力建立穩定的基礎,再用pip補充額外需求。這樣可以盡量避免版本衝突、依賴問題,並保持環境的可重現性與穩定性。如果反過來操作,雖然不一定出問題,但依賴問題出現的風險可能會顯著增加。
Pip、Pip3、Conda和Anaconda的關係(上)
我是TN科技筆記,如果喜歡這篇文章,歡迎留言或轉發給朋友給我支持鼓勵!!