pip和conda有什么区别?


721

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

我可以pip用来安装IPython吗?conda我已经拥有了为什么还要用作另一个python软件包管理器pip

pip和之间有什么区别conda


仔细阅读安装页面,您将看到使用pip进行安装的完整说明,并且conda/ enpgk的目标是new users who want to get up and running with minimal effort:canopy / anaconda是独立的环境,不会干扰系统python(例如venv,但功能更强大)。BTW IPyhton,而不是iPython(大写I)
Matt

3
一个区别是pip可以安装的内容比conda还多:pip可以在一个命令中安装pypi的任何内容。conda需要三个命令:skelete,build,install,如果不起作用,可能需要更多命令。pip可以通过一个命令从github或源代码安装任何东西。conda需要编写“食谱”,这并不容易,尤其是因为文档似乎总是不正确/已过时。
endolith '16

5
相关问题:点对点在conda上的优势是什么?我在下面看到许多Anaconda的拥护者,但一点都没有。如果anaconda很棒,为什么pip仍然是标准?
Brian Postow '16

24
我觉得这句话振聋发聩:“ 皮普是的软件包管理器,并VIRTUALENV是环境管理者。康达既是”。(参考
Atcold

1
观察:我曾经认为conda意味着下载了无数个软件包,但事实不再如此:您可以安装miniconda,它实际上本质上只是软件包管理器conda.io/docs/install/quick.html
休·珀金斯

Answers:


520

引用来自Conda博客

参与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软件包格式。您可以使用并排的两个工具侧(通过安装pipconda install pip),但他们不具备互操作性无论是。

自编写此答案以来,Anaconda 理解Conda和Pip发布了新页面,该页面也与此相呼应:

这凸显了conda和pip之间的关键区别。Pip安装Python软件包,而conda安装软件包,其中可能包含以任何语言编写的软件。例如,在使用pip之前,必须通过系统软件包管理器或下载并运行安装程序来安装Python解释器。另一方面,Conda可以直接安装Python软件包以及Python解释器。

并进一步

有时需要一个软件包,该软件包不是conda软件包,但在PyPI上可用,可以与pip一起安装。在这些情况下,尝试同时使用conda和pip是有意义的。


18
感谢您的解释。但是,我仍然对Conda是否可以取代点子感到困惑?即,康达能否做所有点子能做的事情?
lazywei 2014年

10
@lazywei:我认为它不可能。例如,看起来Conda似乎不支持Wheel存档格式。他们有不同的目标。
马丁·皮特斯

45
@ naught101“只需创建一个食谱”这并不像键入那样简单pip install
endlith 2016年

23
有人可以向我解释一下,如果您使用pip和conda安装相同的软件包(不同版本除外)会发生什么情况,而不同版本的Python在导入它们时会使用它们?
Lance Ruo Zhang

4
@jrh:使用OS软件包管理器时,不能并排安装同一软件包的多个版本,而不能作为核心功能。Conda管理环境,每个环境都有自己特定版本的已安装软件包的混合。因此,前一段时间开发的项目A仍可以使用旧版本的库Foo(没有可用资源来升级该项目以与较新版本一起使用),而项目B则需要该库的最新版本。
马丁·彼得斯

245

这是一个简短的摘要:

点子

  • 仅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是MIT)

实际上,Conda的前两个要点是使许多包装优于点子的原因。由于pip是从源代码安装的,因此如果您无法编译源代码,则可能会很麻烦地安装东西(在Windows上尤其如此,但在Linux上,如果软件包中包含一些困难的C或FORTRAN库,甚至可能也是这样。依赖项)。Conda从二进制安装,这意味着某人(例如Continuum)已经完成了编译软件包的艰苦工作,因此安装很容易。

如果您对构建自己的软件包感兴趣,也有一些区别。例如,pip是建立在setuptools之上的,而Conda使用自己的格式,这种格式具有一些优点(例如,静态的,Python不可知的)。


21
pip不再从源代码构建所有内容。如果有轮子,pip install --use-wheel <package>将安装内置包装。参见此处:wheel.readthedocs.org/en/latest。但是,我个人对Wheel的经验是,几乎没有可用的科学车轮套装,这纯粹是学术性的。当然,如果您的构建环境设置不正确,则pip安装在Windows上几乎都不起作用。所以,现在,康达。
Caleb Hattingh 2014年

4
车轮仍然是新的,并且默认情况下不使用,因此不足为奇的也就不足为奇了。不过,Wheel仍然属于“特定于Python”的类别,这意味着它可能不适用于非Python程序包或依赖于非Python程序包的Python程序包。
asmeurer 2014年

4
我不得不对此表示反对:第二个要点仅是历史性的注释,但是您稍后也要继续讨论。这些天的主要区别是pip是程序包管理器,而conda则是环境管理器。
2016年

9
的确,pip可以从源代码编译,但是随着越来越多的软件包移到车轮上,pi​​p变得越来越少:如今,我可以使用pip在几秒钟内安装大部分所需的东西。因此,并不是说这个答案是错误的,它只是略微过时了,因为过去几年中pip有了很大的改善
Shep

4
从来没有被真正认为PIP只能从源代码安装。在安装轮子之前,我们将鸡蛋作为默认的二进制安装格式,并建议将其作为Windows安装的分发格式,如果可能的话,pip将(仍然会)安装鸡蛋。
马丁·彼得斯

96

其他答案对这些细节给出了合理的描述,但我想强调一些高级要点。

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从中使用它们。


4
最后,第三方conda-forge项目已迅速成为发布Anaconda软件包的行业标准方法。我们最近多物理场生物学模拟器发布了几个由conda-forge托管的软件包 -对此过程的推荐不够。有一个基于GitHub PR的同行评审组件,可以将新配方提交给conda-forge,但是conda-forge自动化方面的优势远远超过了前期投资。am!
Cecil Curry

@CecilCurry我已经Keras在我的代码中导入了,在Mac上安装了anaconda,并同时conda安装了Keras pip。所以,在终端运行我的代码的时候,我怎么知道哪个keras是被导入(在pip一个或conda一个)?
毕马威(KPMG)'18

25

不要再让您感到困惑了,但是您也可以在conda环境中使用pip,这可以验证上面的一般管理员和python特定管理员的评论。

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

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


我以为不建议这样做?
endlith 2016年

7
完全建议在conda内部使用pip。最好使用conda进行安装,但是对于没有conda构建的任何软件包,使用pip是完全可以接受的。
布拉德利·克里德

2
尼特:好像这句话会是fully supportedfully recommended暗示,在我看来,在conda环境中,比conda更好地使用pip,而且我不确定这是您/他们的意思吗?
休·帕金斯

22

引用康达在Continuum网站上发表的关于数据科学的文章:

康达vs点

Python程序员可能很熟悉pip从PyPI下载软件包并管理他们的要求。尽管conda和pip都是程序包管理器,但它们却大不相同:

  • Pip是特定于Python软件包的,而conda是与语言无关的,这意味着我们可以使用conda管理任何语言的软件包。
  • Conda本机创建与语言无关的环境,而pip依靠virtualenv仅管理Python环境尽管建议始终使用conda软件包,但conda也包含pip,因此您不必在这两者之间进行选择。例如,要安装没有conda软件包但可通过pip获得的python软件包,请运行,例如:
conda install pip
pip install gensim

15

引用《Conda:神话与误解》(全面描述):

...

误解3:Conda和Pip是直接竞争对手

现实: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软件包。

Conda和pip不是竞争对手,而是针对不同用户群和使用方式的工具。


1
从市场定位的角度来看,我不确定这是否真的成立。例如,查看pytorch,它提供三种安装类型:conda,pip,source,pytorch.org并推荐:conda
Hugh Perkins

2
“在隔离的环境中安装Python软件包”是大多数Python开发人员使用pip的主要目的。
尼克

当开发人员已经在“那个”虚拟环境中时,@ Nick不是吗?我认为pip可以在虚拟环境中工作并像安装系统一样安装软件包,但是正如sanchos.s所说,它仅安装python软件包,并不关心底层库。如果我错了,请任何人纠正我。
灿金

12

对于WINDOWS用户

最近,“标准”包装工具的状况正在改善:

  • 截至9月,在pypi本身上,有48%的车轮包装。2015年11月11日(高于2015年5月的38%和2014年9月的24%),

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

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

  • 您可以在http://www.lfd.uci.edu/~gohlke/pythonlibs上找到几乎所有关于转轮格式的科学软件包,

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

“康达”包装对于所服务的市场而言仍然更好,并强调了“标准” 应该改进的地方。

(同样,在标准车轮系统和conda系统中,或者在扩展方面,依赖规范的多方面努力不是很Python,如果所有这些打包的“核心”技术都可以通过某种PEP收敛,那就太好了)



2

我可以使用pip安装iPython吗?

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

pip install ipython

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

您可以从GitHub或PyPI手动下载IPython。要安装这些版本之一,请解压缩它并使用终端从顶级源目录运行以下命令:

pip install .

官方推荐的安装方法

当我已经有了pip时,为什么还要使用conda作为另一个python软件包管理器?

这里所说:

如果您需要一个特定的软件包,也许仅用于一个项目,或者需要与其他人共享该项目,那么conda似乎更合适。

康达(YMMV)超过点

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

pip和conda有什么区别?

其他所有人对此都有广泛的回答。


1

pip 仅适用于Python

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


简单的解释,但是教我直接访问Anaconda的网站并下载Python 2.x或3.x发行版。为什么?>,因为它包含了学生所需的所有软件包。Numpy,Scipy,matpliotlib,sklearn等。这就是为什么在理解更好的基本细节方面存在差距的原因。学生
Rene Duchamp

我知道这是一个旧的答案,但是您对Conda / Anaconda的看法对我来说完全是错误的。
AMC

0

我可能已经发现了另一小的区别。我在python环境下/usr而不是在/home任何环境下。为了安装它,我将不得不使用sudo install pip。对我来说,不想要的副作用sudo install pip是比被广泛报道的其他地方略有不同:这样做之后,我还得跑pythonsudo以进口任何的sudo-installed包。我放弃了这一点,最终发现我可以sudo conda将软件包安装到一个环境中/usr,然后在该环境下可以正常导入而不需要sudo获得许可python。我什sudo conda至习惯于修复损坏的东西,pip而不是使用sudo pip uninstall pipor sudo pip --upgrade install pip

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.