943

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

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

pip和 和有什么不一样conda

4

13 回答 13

655

引用康达博客

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

因此,Conda 是一个打包工具和安装程序,旨在做更多的事情pip处理 Python 包之外的库依赖关系以及 Python 包本身。Conda 还创建了一个虚拟环境,就像virtualenv它一样。

因此,或许应该将 Conda 与Buildout进行比较,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 是有意义的。

于 2014-01-08T11:47:46.423 回答
283

免责声明:这个答案描述了十年前的情况,当时 pip 不支持二进制包。Conda 专门用于更好地支持构建和分发二进制包,特别是具有 C 扩展的数据科学库。作为参考,pip 仅获得了对带有轮子的便携式二进制包(2013 年的 pip 1.4)和manylinux1规范(2016 年 3 月的 pip 8.1)的广泛支持。有关更多历史,请参阅更新的答案

这是一个简短的概述:

点子

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

康达

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

在这两种情况下:

  • 用 Python 编写
  • 开源(Conda 是 BSD,pip 是 MIT)

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

如果您有兴趣构建自己的包,也会有一些差异。例如,pip 是建立在 setuptools 之上的,而 Conda 使用它自己的格式,它有一些优点(比如是静态的,并且再次与 Python 无关)。

于 2014-01-08T23:37:25.357 回答
109

其他答案对细节进行了公平的描述,但我想强调一些高层次的观点。

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

于 2014-01-09T01:13:06.217 回答
28

不要进一步混淆你,但你也可以在你的 conda 环境中使用 pip,它验证了上面的一般与 python 特定的经理评论。

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

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

于 2015-05-13T14:25:33.337 回答
28

引用Conda for Data Science文章到 Continuum 的网站:

康达与点子

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
于 2017-01-19T16:54:51.410 回答
17

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

...

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

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

Pip 代表P ip I nstalls P ackages,是 Python 官方认可的包管理器,最常用于安装发布在 Python 包索引 (PyPI) 上的包。pip 和 PyPI 都由 Python 打包机构 (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 不是竞争对手,而是专注于不同用户群体和使用模式的工具。

于 2017-04-24T23:44:54.623 回答
17

pip是一个包管理器。

conda既是包管理器又是环境管理器。

细节:

在此处输入图像描述

参考

于 2019-09-28T16:09:59.673 回答
14

(2021 年更新)

TL;DR 使用 pip,它是 Python 3 以来的官方包管理器。

点子

  • 基本

  • pip 是 python 的默认包管理器

  • pip 自 Python 3.0 起内置

  • 用法:python3 -m venv myenv; source myenv/bin/activate; python3 -m pip install requests

  • 软件包从官方公共 Python 存储库pypi.org下载

  • 它可以在可用时安装预编译的二进制文件(轮子)或源文件(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(那个轮子是 Linux 上的 Python 3.9)。

  • 从源代码安装时,pip 将自动构建包。(这并不总是可能的,尝试在没有 google 构建系统的情况下构建 TensorFlow:D)

  • 二进制轮子可以是特定于 python 版本和特定于操作系统的,请参阅manylinux规范以最大限度地提高可移植性。

康达

  • 除非您获得许可,否则您不得将 Anaconda 或 Anaconda 存储库中的软件包用于商业用途。

  • Conda 是来自 conda 的第三方包管理器。

  • 它由anaconda推广,这是一个 Python 发行版,包括最常见的即用型数据科学库。

  • 当您使用 anaconda 时,您将使用 conda。

  • 包从anaconda repo下载。

  • 它只安装预编译的包。

  • Conda 有自己的包格式。它不使用轮子。

  • conda install安装一个包。

  • conda build构建一个包。

  • conda 可以构建 python 解释器(以及它依赖的其他 C 包)。这就是为 anaconda 构建和捆绑解释器的方式。

  • conda 允许安装和升级 Python 解释器(pip 不允许)。

  • 先进的

  • 从历史上看,conda 的卖点是支持构建和安装二进制包,因为 pip 并不能很好地支持二进制包(直到 wheel 和 manylinux2010 规范)。

  • 强调构建包。Conda 具有广泛的构建设置,它存储大量元数据,以处理依赖项和构建链。

  • 一些项目使用 conda 来启动复杂的构建系统并生成一个轮子,该轮子发布到 pypi.org 用于 pip。

容易安装/鸡蛋

  • 仅供历史参考。不使用
  • egg 是一种废弃的包装形式,它一直使用到 2010 年代中期,并完全被轮子取代
  • egg 是一个 zip 存档,它包含 python 源文件和/或编译的库。
  • 鸡蛋与easy_installpip 的第一个版本一起使用。
  • easy_install是另一个包管理器,在 pip 和 conda 之前。它已在 setuptools v58.3(2021 年)中删除。
  • 它也引起了很多混乱,就像 pip vs conda :D
  • egg 文件加载缓慢、指定不明确且特定于操作系统。
  • 每个 egg 都设置在一个单独的目录中,import mypackage可能需要mypackage.py在数百个目录中查找(安装了多少个库?)。这很慢,对文件系统缓存不友好。

从历史上看,上述三个工具都是开源的,并且是用 Python 编写的。然而,conda 背后的公司在 2020 年更新了他们的服务条款以禁止商业使用,请注意!

Funfact:构建 Python 解释器的唯一严格要求的依赖项是 zlib(一个 zip 库),因为压缩是加载更多包所必需的。Eggs 和 Wheels 包是 zip 文件。

为什么有这么多选择?

一个好问题。

让我们深入了解 Python 和计算机的历史。=D

纯 python 包在任何这些打包器中都可以正常工作。麻烦不仅在于 Python 包。

世界上的大多数代码都依赖于 C。对于用 C 编写的 Python 解释器来说也是如此。对于许多 Python 包来说也是如此,它们是围绕 C 库或混合 python/C/C++ 代码的项目的 python 包装器。

任何涉及 SSL、压缩、GUI(X11 和 Windows 子系统)、数学库、GPU、CUDA 等的东西通常都与一些 C 代码相结合。

这给打包和分发 Python 库带来了麻烦,因为它不仅仅是可以在任何地方运行的 Python 代码。该库必须编译,编译需要编译器和系统库以及第三方库,然后一旦编译,生成的二进制代码仅适用于编译它的特定系统和python版本。

最初,python 可以很好地分发纯 python 库,但很少支持分发二进制库。在 2010 年及前后,您在尝试使用numpyor时会遇到很多错误cassandra。由于缺少依赖项,它下载了源代码并无法编译。或者它下载了一个预构建的包(当时可能是一个鸡蛋)并且在使用时它会因 SEGFAULT 而崩溃,因为它是为另一个系统构建的。这是一场噩梦。

从 2012 年开始,pip 和 Wheels 解决了这个问题。然后等待很多年,让人们采用这些工具并将这些工具传播到稳定的 Linux 发行版(许多开发人员依赖/usr/bin/python. 二进制包的问题延伸到 2010 年代后期。

作为参考,这就是为什么要python3 -m venv myvenv && source myvenv/bin/activate && pip install --upgrade pip setuptools在过时的系统上运行的第一个命令的原因,因为操作系统带有 5 年前的旧 python+pip,它有问题并且无法识别当前的包格式。

Conda 并行开发了他们自己的解决方案。Anaconda 专门用于使数据科学库易于开箱即用(数据科学 = C 和 C++ 无处不在),因此他们必须提出一个包管理器,专门用于解决构建和分发二进制包的问题,​​即 conda .

如果您现在安装任何软件包pip install xxx,它就可以工作。这是安装包的推荐方式,它内置在当前版本的 Python 中。

于 2021-08-23T18:41:54.300 回答
12

对于 WINDOWS 用户

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

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

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

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

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

(此外,在标准轮子系统和 conda 系统或构建中,依赖规范的多重努力并不是非常 Pythonic,如果所有这些打包“核心”技术都可以通过一种 PEP 收敛,那就太好了)

于 2015-05-14T09:03:02.327 回答
4

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

  • PIP/PyPI 将有更多的“实验”包,或者更新的、不太常见的包版本
  • Conda 通常会有更完善的软件包或版本

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

  • 重建环境会更难
  • 修复包不兼容变得更加复杂

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

  • 当您需要的软件包仅存在于一个上时,另一个则没有。
  • 您需要仅在一种环境中可用的特定版本
于 2020-06-08T08:18:17.607 回答
2

我可以使用 pip 安装 iPython 吗?

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

pip install ipython

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

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

pip install .

官方推荐的安装方式

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

正如这里所说:

如果你需要一个特定的包,可能只用于一个项目,或者如果你需要与其他人共享项目,conda 似乎更合适。

Conda 在 ( YMMV )中超过 pip

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

pip 和 conda 有什么区别?

这是其他所有人都广泛回答的问题。

于 2017-07-25T15:33:36.750 回答
-1

我可能还发现了另一个细微的差别。我有我的 python 环境,/usr而不是/home或其他。为了安装它,我必须使用sudo install pip. 对我来说,不受欢迎的副作用与sudo install pip其他地方广泛报道的略有不同:这样做之后,我必须运行pythonwithsudo才能导入任何sudo-installed 包。我放弃了这一点,最终发现我可以sudo conda将软件包安装到一个环境中,然后在该环境下正常导入,/usr而无需sudo. python我什至习惯于sudo conda修复损坏pip而不是使用sudo pip uninstall pipor sudo pip --upgrade install pip

于 2019-01-09T11:48:06.497 回答
-1

pip仅适用于 Python

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

于 2018-05-03T01:21:19.377 回答