[雪峰磁針石部落格]python包管理工具:Conda和pip比較

書籍尋找發表於2018-12-04

圖片.png

Conda和pip通常被認為幾乎完全相同。雖然這兩個工具的某些功能重疊,但它們設計用於不同的目的。 Pip是Python Packaging Authority推薦的用於從Python Package Index安裝包的工具。 Pip安裝打包為wheels或原始碼分發的Python軟體。後者可能要求系統安裝相容的編譯器和庫。

Conda是跨平臺的包和環境管理器,可以安裝和管理來自Anaconda repositoryAnaconda Cloud的conda包。 Conda包是二進位制檔案,徐需要使用編譯器來安裝它們。另外,conda包不僅限於Python軟體。它們還可能包含C或C ++庫,R包或任何其他軟體。

這是conda和pip之間的關鍵區別。 Pip安裝Python包,而conda安裝包可能包含用任何語言編寫的軟體的包。在使用pip之前,必須通過系統包管理器或下載並執行安裝程式來安裝Python直譯器。而Conda可以直接安裝Python包以及Python直譯器。

另一個區別是conda能夠建立可以包含不同版本的Python或其他軟體包的隔離環境。在使用資料科學工具時,這非常有用,因為不同的工具可能包含衝突的要求,這些要求可能會阻止它們全部安裝到單個環境中。 Pip沒有內建的環境支援,而是依賴於virtualenvvenv 等其他工具來建立隔離環境。 pipenv,poetry和hatch wrap pip和virtualenv等工具提供了統一的方法來處理這些環境。

Pip和conda在如何實現環境中的依賴關係方面也有所不同。安裝包時,pip會在遞迴的序列迴圈中安裝依賴項。沒有努力確保同時滿足所有包的依賴性。如果較早安裝的軟體包與稍後安裝的軟體包具有不相容的依賴性版本,則可能導致破壞的環境。conda使用可確保滿足環境中安裝的所有包的所有要求。此檢查可能需要額外的時間,但有助於防止建立破壞的環境,前期關於依賴關係包的後設資料是正確的。

考慮到conda和pip之間的相似性,有些人試圖將這些工具結合起來建立資料科學環境也就不足為奇了。將pip與conda結合的主要原因是有些包只能通過pip安裝。 Anaconda創酷提供超過1,500個軟體包,包括最流行的資料科學,機器學習和AI框架。這些,以及包括conda-forge和bioconda在內的資料通過Anaconda雲提供的數千個附加軟體包,可以使用conda進行安裝。儘管有大量的軟體包,但與PyPI上提供的150,000多個軟體包相比,它仍然很小。有時候需要的包沒有conda包,但在PyPI上有,可以用pip安裝。

參考資料

類別 conda pip
管理 二進位制 wheel 或原始碼
需要編譯器 no yes
語言 any Python
虛擬環境 支援 通過 virtualenv或venv等支援
依賴性檢查 yes 螢幕提示使用者選擇
包來源 Anaconda repo和cloud PyPi


相關文章