pip和conda有什么区别?

时间:2014-01-08 11:44:45

标签: python pip ipython package-managers conda

我知道pip是python包的包管理器。但是,我看到IPython网站上的安装使用conda来安装IPython。

我可以使用pip安装IPython吗?当我已经拥有conda时,为什么要将pip用作另一个python包管理器?

pipconda之间的区别是什么?

12 个答案:

答案 0 :(得分:413)

引用Conda blog

  

长期参与python世界,我们都知道pip,easy_install和virtualenv,但这些工具并不能满足我们所有的特定要求。主要问题是它们专注于Python,忽略了非Python库依赖项,如HDF5,MKL,LLVM等,它们的源代码中没有setup.py,也没有将文件安装到Python的站点中-packages目录。

所以Conda是一个打包工具和安装程序,旨在做的不仅仅是pip;处理Python包的库外部以及Python包本身。 Conda还创建了一个虚拟环境,例如virtualenv

因此,应将Conda与Buildout进行比较,这可能是另一种可以处理Python和非Python安装任务的工具。

由于Conda引入了新的包装格式,因此您无法互换使用pip和Conda; pip无法安装Conda包格式。您可以并排使用这两个工具(通过pip安装conda install pip),但它们也不能互操作。

答案 1 :(得分:225)

这是一个简短的纲要:

PIP

  • 仅限Python包。
  • 从源代码编译所有内容。 编辑:pip现在安装二进制轮子,如果可用的话。
  • 由核心Python社区祝福(即Python 3.4+包含自动提升pip的代码)。

康达

  • Python不可知论者。现有软件包的主要关注点是Python,实际上conda本身是用Python编写的,但你也可以为C库或R软件包提供conda软件包,或者任何东西。
  • 安装二进制文件。有一个名为conda build的工具可以从源代码构建软件包,但conda install本身可以从已构建的conda软件包中安装。
  • 外部。 Conda是Anaconda的包管理器,它是由Continuum Analytics提供的Python发行版,但它也可以在Anaconda之外使用。您可以通过pip安装将它与现有的Python安装一起使用(尽管除非您有充分的理由使用现有安装,否则不建议这样做。)

在这两种情况下:

  • 用Python编写
  • 开源(conda是BSD,pip是麻省理工学院)

conda的前两个要点实际上是对许多包装有利于pip的。由于pip是从源代码安装的,如果你无法编译源代码,安装它就会很痛苦(在Windows上尤其如此,但如果软件包有一些困难的C或FORTRAN库,它甚至可以在Linux上运行依赖)。 Conda从二进制文件安装,这意味着有人(例如Continuum)已经完成了编译软件包的艰苦工作,因此安装很容易。

如果您有兴趣构建自己的软件包,也会有一些差异。例如,pip建立在setuptools之上,而conda使用自己的格式,这有一些优点(比如静态,再次,Python不可知)。

答案 2 :(得分:86)

其他答案给出了详细的详细描述,但我想强调一些高级别的要点。

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开始。

答案 3 :(得分:25)

不要混淆你, 但你也可以在你的conda环境中使用pip,它可以验证上面的一般与python特定管理器注释。

conda install -n testenv pip
source activate testenv
pip <pip command>

您还可以将pip添加到任何环境的默认包中,以便每次都存在,因此您不必遵循上述代码段。

答案 4 :(得分:20)

Conda for Data Science文章引用连续统一网站:

  

Conda 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

答案 5 :(得分:12)

适用于WINDOWS用户

“标准”包装工具的情况最近有所改善:

    在pypi本身的
  • ,截至9月,现在有48%的轮组件。 2015年第11期(2015年5月为38%,2014年9月为24%),

  • 现在支持每个最新的python 2.7.9开箱即用的轮式格式,

“标准”+“调整”包装工具的情况也在改善:

  • 您可以在http://www.lfd.uci.edu/~gohlke/pythonlibs找到几乎所有轮式的科学包装,

  • mingwpy项目可能会为Windows用户带来一天的“编译”包,允许在需要时从源代码安装所有内容。

“Conda”包装对其所服务的市场来说仍然更好,并突出了“标准”应该改进的领域。

(同样,依赖规范多次努力,在标准轮系统和conda系统中,或者扩展,并不是非常pythonic,如果所有这些包装'核心'技术可以通过一种PEP收敛将是很好的)

答案 6 :(得分:12)

引自Conda: Myths and Misconceptions(综合说明):

...

神话#3:Conda和pip是直接竞争对手

现实:Conda和pip有不同的用途,只能在一小部分任务中直接竞争:即在隔离环境中安装Python包。

Pip代表 P ip nstalls P ackages,是Python官方认可的软件包管理器,最常用于安装在Python Package Index(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不是竞争对手,而是专注于不同用户群和使用模式的工具。

答案 7 :(得分:3)

pip仅适用于Python

conda仅适用于Anaconda +其他科学软件包,如R依赖项等。不是每个人都需要已经附带Python的Anaconda。 Anaconda主要面向那些进行机器学习/深度学习等的人。休闲Python开发人员不会在他的笔记本电脑上运行Anaconda。

答案 8 :(得分:2)

pip是程序包管理器。

conda既是程序包管理器又是环境守护者。

详细信息:

enter image description here

参考

答案 9 :(得分:2)

要回答原始问题,
对于安装软件包,PIP和Conda是完成同一件事的不同方法。两者都是用于安装软件包的标准应用程序。主要区别在于打包文件的来源。

  • PIP / PyPI将具有更多的“实验性”软件包,或者更新,较少见的软件包版本
  • Conda通常将拥有更完善的软件包或版本

一个重要的警告注意事项:如果您同时使用两个来源(pip和conda)在同一环境中安装软件包,则以后可能会引起问题。

  • 重新创建环境将更加困难
  • 修复程序包不兼容问题变得更加复杂

最佳做法是选择一个应用程序(PIP或Conda)来安装软件包,然后使用该应用程序安装所需的任何软件包。 但是,在conda环境中仍然有许多例外或原因仍要使用pip,反之亦然。 例如:

  • 当有包时,您只需要一个包,然后 其他没有它们。
  • 您需要一个仅在一个环境中可用的特定版本

答案 10 :(得分:1)

  
    

我可以使用pip安装iPython吗?

  

当然,两者(页面上的第一种方法)

pip install ipython

和(第三种方法,第二种方法是conda

  

您可以从GitHub或PyPI手动下载IPython。安装一个   在这些版本中,解压缩并从顶层运行以下内容   使用终端的源目录:

pip install .

officially recommended ways to install

  
    

当我已经拥有pip时,为什么我应该使用conda作为另一个python包管理器?

  

如上所述here

  

如果您需要特定的包,可能只针对一个项目,或者如果您需要与其他人共享项目,那么conda似乎更合适。

康达超越(YMMV

  • 使用非python工具的项目
  • 与同事分享
  • 在版本之间切换
  • 在具有不同库版本的项目之间切换
  
    

pip和conda有什么区别?

  

其他人都广泛回答。

答案 11 :(得分:0)

我可能还发现了另一个次要的区别。我的Python环境在/usr下,而不是/home下。为了安装到它,我将不得不使用sudo install pip。对我来说,sudo install pip的不良副作用与其他地方广泛报道的稍有不同:这样做之后,我必须在python上运行sudo才能导入任何{ {1}}个已安装的软件包。我放弃了这一点,最终发现我可以使用sudo将软件包安装到sudo conda下的环境中,然后再正常导入该环境而无需获得/usr的{​​{1}}权限。我什至使用sudo来修复损坏的python,而不是使用sudo condapip