[英]What is the difference between using conda pip install and conda skeleton?
[英]What is the difference between pip and conda?
我知道pip
是 python 包的 package 管理器。 但是,我在 IPython 的網站上看到安裝使用conda
來安裝 IPython。
我可以使用pip
來安裝 IPython 嗎? 當我已經擁有pip
時,為什么還要使用conda
作為另一個 python package 管理器?
pip
和conda
有什么區別?
引自Conda 博客:
涉足python世界這么久,我們都知道pip、easy_install和virtualenv,但這些工具並不能滿足我們所有的具體要求。 主要問題是他們專注於 Python,忽略了非 Python 庫依賴項,例如 HDF5、MKL、LLVM 等,它們的源代碼中沒有 setup.py,也不會將文件安裝到 Python 的站點中- 包目錄。
所以 Conda 是一個打包工具和安裝程序,旨在做比pip
做的更多的事情; 處理 Python 包之外的庫依賴項以及 Python 包本身。 Conda 還創建了一個虛擬環境,就像virtualenv
一樣。
因此,應該將 Conda 與Buildout進行比較,后者是另一種可讓您同時處理 Python 和非 Python 安裝任務的工具。
因為 Conda 引入了一種新的打包格式,您不能互換使用pip
和 Conda; pip
無法安裝 Conda 包格式。 您可以通過側(通過安裝使用這兩種工具側pip
與conda install pip
),但他們不具備互操作性無論是。
自從寫下這個答案后,Anaconda 發布了一個關於理解 Conda 和 Pip的新頁面,這也呼應了這一點:
這突出了 conda 和 pip 之間的主要區別。 Pip 安裝 Python 包,而 conda 安裝可能包含用任何語言編寫的軟件的包。 例如,在使用 pip 之前,必須通過系統包管理器或通過下載並運行安裝程序來安裝 Python 解釋器。 另一方面,Conda 可以直接安裝 Python 包和 Python 解釋器。
並進一步
有時需要一個包,它不能作為 conda 包提供,但在 PyPI 上可用並且可以使用 pip 安裝。 在這些情況下,嘗試同時使用 conda 和 pip 是有意義的。
這是一個簡短的概述:
conda build
的工具可以從源代碼構建包,但是conda install
本身會從已經構建的 Conda 包中安裝東西。在這兩種情況下:
Conda 的前兩個要點確實使它在許多軟件包中優於 pip。 由於 pip 從源代碼安裝,如果您無法編譯源代碼,用它安裝東西可能會很痛苦(這在 Windows 上尤其如此,但如果包有一些困難的 C 或 FORTRAN 庫,它甚至可以在 Linux 上如此依賴)。 Conda 從二進制安裝,這意味着有人(例如,Continuum)已經完成了編譯包的繁重工作,因此安裝很容易。
如果您有興趣構建自己的包,也有一些差異。 例如,pip 建立在 setuptools 之上,而 Conda 使用它自己的格式,它有一些優點(比如是靜態的,同樣,與 Python 無關)。
其他答案對細節進行了公正的描述,但我想強調一些高層次的觀點。
pip 是一個包管理器,方便安裝、升級和卸載python 包。 它也適用於虛擬python環境。
conda 是任何軟件(安裝、升級和卸載)的包管理器。 它還適用於虛擬系統環境。
conda 的設計目標之一是方便用戶所需的整個軟件堆棧的包管理,其中一個或多個 python 版本可能只是一小部分。 這包括低級庫,例如線性代數、編譯器(例如 Windows 上的 mingw)、編輯器、版本控制工具(例如 Hg 和 Git),或任何其他需要分發和管理的東西。
對於版本管理,pip 允許您在多個python環境之間切換和管理。
Conda 允許您在多個通用環境之間切換和管理多個通用環境,在這些環境中,多個其他東西的版本號可能會有所不同,例如 C 庫、編譯器、測試套件或數據庫引擎等。
Conda 不是以 Windows 為中心的,但在 Windows 上,當需要安裝和管理需要編譯的復雜科學包時,它是目前可用的卓越解決方案。
當我想到在 Windows 上嘗試通過 pip 編譯許多這些包時浪費了多少時間,或者在需要編譯時調試失敗的pip install
會話時,我想哭。
最后一點,Continuum Analytics 還托管(免費) binstar.org (現在稱為anaconda.org )以允許常規包開發人員創建他們自己的自定義(構建!)軟件堆棧,他們的包用戶將能夠從conda install
.
不要進一步混淆你,但你也可以在你的 conda 環境中使用 pip,它驗證了上面的一般與 python 特定管理器的評論。
conda install -n testenv pip
source activate testenv
pip <pip command>
您還可以將 pip 添加到任何環境的默認包中,以便每次都存在它,因此您不必遵循上述代碼段。
從Conda for Data Science文章引用到 Continuum 的網站:
康達 vs pip
Python 程序員可能熟悉 pip 從 PyPI 下載包並管理他們的需求。 雖然 conda 和 pip 都是包管理器,但它們非常不同:
- Pip 專用於 Python 包,而 conda 與語言無關,這意味着我們可以使用 conda 來管理來自任何語言的包 Pip 從源代碼編譯,conda 安裝二進制文件,消除編譯負擔
- Conda 在本機創建與語言無關的環境,而 pip 依賴 virtualenv 僅管理 Python 環境雖然建議始終使用 conda 包,但 conda 也包含 pip,因此您不必在兩者之間進行選擇。 例如,要安裝一個沒有 conda 包但可以通過 pip 獲得的 python 包,只需運行,例如:
conda install pip
pip install gensim
引用Conda:神話和誤解(綜合描述):
...
現實:Conda 和 pip 服務於不同的目的,並且只在一小部分任務中直接競爭:即在隔離環境中安裝 Python 包。
皮普,代表對於P IP我nstalls P ackages,是Python的官方認可的包管理器,並且是最常用的在其上安裝Python包索引(PyPI中)發布的數據包。 pip 和 PyPI 均由 Python Packaging Authority (PyPA) 管理和支持。
簡而言之,pip 是一個通用的 Python 包管理器; conda 是一個與語言無關的跨平台環境管理器。 對於用戶來說,最顯着的區別大概就是這個:pip在任何環境下都安裝python包; conda 在 conda 環境中安裝任何包。 如果您所做的只是在隔離的環境中安裝 Python 包,則 conda 和 pip+virtualenv 大多可以互換,以依賴處理和包可用性為模的一些差異。 我所說的隔離環境是指 conda-env 或 virtualenv,您可以在其中安裝軟件包而無需修改系統 Python 安裝。
即使撇開神話#2,如果我們只關注 Python 包的安裝,conda 和 pip 服務於不同的受眾和不同的目的。 如果您想在現有系統 Python 安裝中管理 Python 包,則 conda 無法幫助您:按照設計,它只能在 conda 環境中安裝包。 如果您想使用許多依賴外部依賴項的 Python 包(NumPy、SciPy 和 Matplotlib 是常見示例),同時以有意義的方式跟蹤這些依賴項,pip 無法幫助您:按照設計,它管理 Python 包並且僅管理 Python 包。
Conda 和 pip 不是競爭對手,而是專注於不同用戶群體和使用模式的工具。
對於 WINDOWS 用戶
“標准”打包工具的情況最近有所好轉:
在 pypi 本身上,截至 9 月,現在有 48% 的車輪包。 2015 年 11 日(從 2015 年 5 月的 38% 和 2014 年 9 月的 24% 上升),
現在,每個最新的python 2.7.9 都支持開箱即用的wheel 格式,
“標准”+“調整”打包工具的情況也在改善:
你可以在http://www.lfd.uci.edu/~gohlke/pythonlibs找到幾乎所有關於輪格式的科學包,
mingwpy 項目可能有一天會為 Windows 用戶帶來一個“編譯”包,允許在需要時從源代碼安裝所有內容。
“Conda”包裝對於它所服務的市場來說仍然更好,並突出了“標准”應該改進的領域。
(此外,在標准輪系統和 conda 系統或構建中,依賴規范的多重努力並不是非常 Pythonic,如果所有這些打包“核心”技術能夠通過某種 PEP 融合,那就太好了)
要回答原來的問題,
對於安裝包,PIP 和 Conda 是完成同一件事的不同方式。 兩者都是安裝軟件包的標准應用程序。 主要區別在於包文件的來源。
一個重要的警告旁注:如果您使用兩個源(pip 和 conda)在同一環境中安裝軟件包,這可能會導致以后出現問題。
最佳做法是選擇一個應用程序(PIP 或 Conda)來安裝軟件包,然后使用該應用程序安裝您需要的任何軟件包。 但是,在 conda 環境中仍然使用 pip 有很多例外或原因,反之亦然。 例如:
(2021 年更新)
基本
pip 是 python 的默認包管理器
pip 從 Python 3.0 開始內置
用法: python3 -m venv myenv; source myenv/bin/active; python3 -m pip install requests
python3 -m venv myenv; source myenv/bin/active; python3 -m pip install requests
軟件包從pypi.org下載,這是主要的公共 python 存儲庫
它可以在可用時安裝預編譯的二進制文件(輪子)或源文件(tar/zip 存檔)。
編譯后的二進制文件很重要,因為許多包混合了 Python/C/other 與第三方依賴項和復雜的構建鏈。 它們必須作為二進制文件分發以備使用。
先進的
pip 實際上可以從任何存檔、輪子或 git/svn 存儲庫安裝...
...可以位於磁盤、HTTP URL 或個人 pypi 服務器上。
pip install git+https://github.com/psf/requests.git@v2.25.0
例如(它可以用於測試補丁)。
pip install https://download.pytorch.org/whl/cpu/torch-1.9.0%2Bcpu-cp39-cp39-linux_x86_64.whl
(那個輪子是Linux上的Python 3.9)。
從源代碼安裝時,pip 將自動構建包。 (這並不總是可能的,嘗試在沒有谷歌構建系統的情況下構建 TensorFlow :D)
二進制輪可以是特定於 Python 版本和特定於操作系統的,請參閱manylinux規范以最大限度地提高可移植性。
除非您獲得許可,否則您不得將 Anaconda 或來自 Anaconda 的軟件包用於商業用途。
Conda 是 conda 的第三方包管理器。
它由anaconda推廣,這是一個 Python 發行版,包括最常見的現成數據科學庫。
當您使用 anaconda 時,您將使用 conda。
軟件包是從anaconda repo下載的。
它只安裝預編譯包。
Conda 有自己的包格式。 它不使用輪子。
conda install
安裝包。
conda build
來構建/重建一個包。
conda 捆綁了一個 python 解釋器。
conda 允許安裝和升級 Python 解釋器。 (點子沒有)。
先進的
從歷史上看,conda 的賣點是支持構建和安裝二進制包,因為 pip 並沒有很好地支持二進制包(直到輪子和 manylinux2010 規范)。
重視建設。 Conda 包具有廣泛的配置格式和元數據,可用於處理依賴項和構建鏈。
一些項目使用 conda 來啟動復雜的構建系統並生成一個輪子,可以將其發布到 pypi.org 並與 pip 一起使用。
從歷史上看,上述三個工具都是開源的,並且是用 Python 編寫的。 然而,conda 背后的公司在 2020 年更新了他們的服務條款以禁止商業用途,請注意!
Funfact :構建 Python 解釋器的唯一嚴格要求的依賴項是 zlib(一個 zip 庫),因為從前需要壓縮才能加載任何進一步的包。
一個好問題。
讓我們深入研究 Python 和計算機的歷史。 =D
純 python 包在任何這些打包程序中都可以正常工作。 問題不僅在於 Python 包。
世界上的大部分代碼都依賴於 C。對於用 C 編寫的 Python 解釋器來說是這樣。對於許多 Python 包來說也是如此,它們通常包裝 C 庫或交織在一起的 python/C/C++/其他代碼。
任何涉及 SSL、壓縮、GUI(X11 和 Windows 子系統)、數學庫、GPU、CUDA 等的東西……通常都涉及到鏈中的一些 C。
這給打包和分發 Python 庫帶來了麻煩,因為不僅僅是 Python 可以在任何地方運行。 必須編譯庫,編譯需要編譯器和額外的依賴項,一旦編譯,生成的二進制文件僅適用於編譯它的特定系統和 python 版本。
最初,python 可以很好地分發純 python 庫,但對分發二進制庫的支持很少。 在 2010 年左右,您會在嘗試使用 numpy 或 cassandra 時遇到很多錯誤。 由於缺少依賴項,它下載了源代碼並無法編譯。 由於目標是另一個操作系統,它下載了預構建的二進制文件並且無法加載 SEGFAULT。 這是一場噩夢。
這是從 2012 年開始通過 pip 和輪子整理的。 為人們采用較新的格式以及將工具傳播到穩定的 Linux 發行版(大多數開發人員依賴 /usr/bin/python)增加很多年,實際上二進制包的問題擴展到 2010 年代后期(第一個命令要運行的是pip install --upgrade pip setuptools
在過時的系統上)。
Conda 同時開發了他們自己的解決方案。 Anaconda 專門用於使數據科學庫易於開箱即用(數據科學 = C 和 C++ 無處不在),因此他們必須提出一個包管理器,專門用於解決構建和分發二進制包的問題,conda .
如果您現在使用pip install xxx
安裝任何軟件包,它就可以正常工作。 這是安裝包的推薦方式,它內置在當前版本的 Python 中。
我可以使用 pip 安裝 iPython 嗎?
當然,兩者(頁面上的第一種方法)
pip install ipython
和(第三種方法,第二種是conda
)
您可以從 GitHub 或 PyPI 手動下載 IPython。 要安裝這些版本之一,請解壓縮它並使用終端從頂級源目錄運行以下命令:
pip install .
當我已經有了 pip 時,為什么要使用 conda 作為另一個 python 包管理器?
正如這里所說:
如果您需要一個特定的包,可能只用於一個項目,或者您需要與其他人共享該項目,則 conda 似乎更合適。
Conda 超過 pip ( YMMV )
pip 和 conda 有什么區別?
這是其他人廣泛回答的。
(2022 年更新)這個答案來自@user5994461 上面的答案
您可以使用 pip 進行 package 管理。 Pip 是 Python.org 的官方內置 package 管理器自 ZA7F5F35426B9238173Z.org 起
pip 不是虛擬環境管理器。
基本
pip 是 python 的默認 package 管理器
pip 自 Python 3.0 起內置
用法: python3 -m venv myenv; source myenv/bin/activate; python3 -m pip install requests
python3 -m venv myenv; source myenv/bin/activate; python3 -m pip install requests
包從pypi.org下載,官方公共 python 存儲庫
它可以在可用時安裝預編譯的二進制文件(輪子)或源文件(tar/zip 存檔)。
編譯后的二進制文件很重要,因為許多包混合了 Python/C/其他與第三方依賴項和復雜的構建鏈。 它們必須以二進制文件的形式分發以供使用。
先進的
pip 實際上可以從任何存檔、輪子或 git/svn 存儲庫安裝...
...可以位於磁盤上,也可以位於 HTTP URL 或個人 pypi 服務器上。
pip install git+https://github.com/psf/requests.git@v2.25.0
(它對於測試分支上的補丁很有用)。
pip install https://download.pytorch.org/whl/cpu/torch-1.9.0%2Bcpu-cp39-cp39-linux_x86_64.whl
(that wheel is Python 3.9 on Linux).
從源安裝時,pip 將自動構建 package。 (這並不總是可能的,嘗試在沒有谷歌構建系統的情況下構建 TensorFlow:D)
二進制輪子可以是特定於 python 版本和特定於操作系統的,請參閱manylinux規范以最大限度地提高可移植性。
conda 是由開源社區維護的開源環境管理器和 package 管理器。 它獨立於 Anaconda, Inc. 並且不需要商業許可即可使用。
conda is also bundled into Anaconda Navigator, a popular commercial Python distribution from Anaconda, Inc. Anaconda ) that includes most common data science and Python developer libraries ready-to-use.
當您使用 Anaconda Navigator GUI 時,您將使用 conda。
可以從 conda-forge、anaconda repo 4和其他公共和私有 conda package“渠道”(又名 repos)下載軟件包。
它只安裝預編譯的包。
conda 有自己的 package 格式。 它不使用輪子。
conda install
安裝 package。
conda build
以構建 package。
conda 可以構建 python 解釋器(以及它依賴的其他 C 包)。 這就是為 Anaconda Navigator 構建和捆綁解釋器的方式。
conda 允許安裝和升級 Python 解釋器(pip 不允許)。
先進的
從歷史上看,conda 的一個賣點是支持構建和安裝二進制包,因為 pip 不能很好地支持二進制包(直到輪子和 manylinux2010 規范)。
強調構建包。 conda 具有廣泛的構建設置,它存儲大量元數據,以處理依賴項和構建鏈。
一些項目使用 conda 來啟動復雜的構建系統並生成一個輪子,該輪子發布到 pypi.org 的 pip。
conda 強調構建和管理虛擬環境。 conda 是設計用來編程的 language-agnostic 虛擬環境管理器。 conda 可以安裝和管理其他 package 管理器,例如 npm、pip 和其他語言的 ZEFE90A8E604A7F6B70DFE 管理器
我可以將 Anaconda Navigator 軟件包用於商業用途嗎? 新語言規定,允許個人愛好者、學生、大學、非營利組織或員工少於 200 人的企業使用,所有其他用途都被視為商業用途,因此需要與 Anaconda 建立業務關系。 (截至 2020 年 10 月 28 日)
如果您是大型開發人員組織,即超過 200 名員工,則不允許您將 Anaconda 或 Anaconda 存儲庫中的軟件包用於商業用途,除非您獲得許可證。
從 conda-forge 存儲庫中提取和使用(正確開源的)包不需要 Anaconda, Inc. 的商業許可。開發人員可以使用 conda-forge 基礎設施中提供的打包工具自由構建自己的 conda 包。
easy_install
和 pip 的第一個版本一起使用。easy_install
是另一個 package 管理器,在 pip 和 conda 之前。 它已在 setuptools v58.3(2021 年)中刪除。import mypackage
必須在可能數百個目錄中查找mypackage.py
(安裝了多少個庫?)。 這很慢,對文件系統緩存不友好。Funfact :構建 Python 解釋器的唯一嚴格要求的依賴項是 zlib(一個 zip 庫),因為壓縮是加載更多包所必需的。 雞蛋和輪子包是 zip 文件。
一個好問題。
讓我們深入了解 Python 和計算機的歷史。 =D
純 python 包在任何這些打包器中都可以正常工作。 麻煩不僅在於 Python 包。
世界上大部分代碼都依賴於 C。 Python 解釋器也是如此,它是用 C 編寫的。 對於許多 Python 包來說都是如此,它們是 python 包裝器,圍繞 C 庫或混合 python/C/C++ 代碼的項目。
Anything that involves SSL, compression, GUI (X11 and Windows subsystems), math libraries, GPU, CUDA, etc... is typically coupled with some C code.
這給 package 和分發 Python 庫帶來了麻煩,因為它不僅僅是可以在任何地方運行的 Python 代碼。 該庫必須經過編譯,編譯需要編譯器和系統庫以及第三方庫,然后編譯后,生成的二進制代碼僅適用於編譯它的特定系統和 python 版本。
最初,python 可以很好地分發純 python 庫,但很少支持分發二進制庫。 在 2010 年及前后,您在嘗試使用numpy
或cassandra
時會遇到很多錯誤。 由於缺少依賴項,它下載了源代碼並無法編譯。 或者它下載了一個預構建的 package(當時可能是一個雞蛋)並且在使用時它會因 SEGFAULT 而崩潰,因為它是為另一個系統構建的。 這是一場噩夢。
從 2012 年開始,pip 和車輪解決了這個問題。 然后等待許多年人們采用這些工具並將這些工具傳播到穩定的 Linux 發行版(許多開發人員依賴/usr/bin/python
)。 二進制包的問題延伸到 2010 年代后期。
作為參考,這就是為什么要運行的第一個命令是python3 -m venv myvenv && source myvenv/bin/activate && pip install --upgrade pip setuptools
在過時的系統上,因為操作系統帶有 5 年前的舊 python+pip錯誤且無法識別當前的 package 格式。
Continuum Analytics(后來更名為 Anaconda, Inc.)並行開發了自己的解決方案(發布為 Anaconda Navigator)。 Anaconda Navigator was specifically meant to make data science libraries easy to use out-of-the-box (data science = C and C++ everywhere), hence they came up with a package manager specifically meant to address building and distributing binary packages, and built它進入環境管理器conda。
如果您現在安裝任何 package 和pip install xxx
,它通常可以正常工作。 pip 是推薦的方法來安裝內置於當前版本 Python 的軟件包。
pip
僅適用於 Python
conda
僅適用於 Anaconda + 其他科學包,如 R 依賴項等。不是每個人都需要 Python 自帶的 Anaconda。 Anaconda 主要適用於那些從事機器學習/深度學習等工作的人。休閑 Python 開發人員不會在他的筆記本電腦上運行 Anaconda。
我可能已經發現了另一個性質較小的差異。 我在/usr
而不是/home
或其他什么地方有我的 python 環境。 為了安裝到它,我必須使用sudo install pip
。 對我來說, sudo install pip
的不良副作用與其他地方廣泛報道的略有不同:這樣做之后,我必須使用sudo
運行python
才能導入任何sudo
安裝的包。 我放棄了,最終發現我可以使用sudo conda
將包安裝到/usr
下的環境中,然后正常導入而無需python
sudo
權限。 我什至使用sudo conda
來修復損壞的pip
而不是使用sudo pip uninstall pip
或sudo pip --upgrade install pip
。
到 2021 年, conda
依賴解決時間變得不可接受。 我正在切換到曼巴來管理conda
環境。
如果您正在使用 conda,一定要嘗試一下mamba
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.