关于python:pip和conda有什么区别?

What is the difference between pip and conda?

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

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

pipconda之间有什么区别?


引自Conda博客:

Having been involved in the python world for so long, we are all aware of pip, easy_install, and virtualenv, but these tools did not meet all of our specific requirements. The main problem is that they are focused around Python, neglecting non-Python library dependencies, such as HDF5, MKL, LLVM, etc., which do not have a setup.py in their source code and also do not install files into Python’s site-packages directory.

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

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

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

自写这个答案以来,Anaconda已经发布了一个关于理解Conda和Pip的新页面,这也与此相呼应:

This highlights a key difference between conda and pip. Pip installs Python packages whereas conda installs packages which may contain software written in any language. For example, before using pip, a Python interpreter must be installed via a system package manager or by downloading and running an installer. Conda on the other hand can install Python packages as well as the Python interpreter directly.

并进一步

Occasionally a package is needed which is not available as a conda package but is available on PyPI and can be installed with pip. In these cases, it makes sense to try to use both conda and 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不可知)。


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

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特定管理器注释。

1
2
3
conda install -n testenv pip
source activate testenv
pip <pip command>

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


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

Conda vs pip

Python programmers are probably familiar with pip to download packages from PyPI and manage their requirements. Although, both conda and pip are package managers, they are very different:

  • Pip is specific for Python packages and conda is language-agnostic, which means we can use conda to manage packages from any language
    Pip compiles from source and conda installs binaries, removing the burden of compilation
  • Conda creates language-agnostic environments natively whereas pip relies on virtualenv to manage only Python environments
    Though it is recommended to always use conda packages, conda also includes pip, so you don’t have to choose between the two. For example, to install a python package that does not have a conda package, but is available through pip, just run, for example:
1
2
conda install pip
pip install gensim

引自康达:神话和误解(综合描述):

...

误区3:Conda和pip是直接的竞争对手

现实:Conda和pip服务于不同的目的,并且只在一小部分任务中直接竞争:即在隔离环境中安装Python包。

Pip代表Pip Installs Packages,是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不是竞争对手,而是专注于不同用户群和使用模式的工具。


对于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系统或buildout中,并不是非常pythonic,如果所有这些包装'核心'技术可以通过某种PEP汇聚,那将是很好的)


pip仅适用于Python

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


Can I use pip to install iPython?

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

1
pip install ipython

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

You can manually download IPython from GitHub or PyPI. To install one
of these versions, unpack it and run the following from the top-level
source directory using the Terminal:

1
pip install .

是官方推荐的安装方式。

Why should I use conda as another python package manager when I already have pip?

如上所述:

If you need a specific package, maybe only for one project, or if you need to share the project with someone else, conda seems more appropriate.

康达超越点(YMMV)

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

What is the difference between pip and conda?

其他人都广泛回答了这个问题。


我可能发现了一个小的性质的另一个区别。我的/usr下的python环境而不是/home或其他什么。为了安装它,我将不得不使用sudo install pip。对我来说,sudo install pip的不良副作用与其他地方广泛报道的不同:在这样做之后,我必须用sudo运行python才能导入任何sudo安装的软件包。我放弃了这一点,最终发现我可以使用sudo conda将软件包安装到/usr下的环境中,然后正常导入,而不需要pythonsudo权限。我甚至使用sudo conda来修复损坏的pip而不是使用sudo pip uninstall pipsudo pip --upgrade install pip