geekdoc-python-zh/docs/askpython/conda-vs-pip.md

6.3 KiB
Raw Permalink Blame History

Conda 与 Pip:选择您的 Python 包管理器

原文:https://www.askpython.com/python/conda-vs-pip

在我们对 Python 的日常使用中Conda 和 Pip 有时可以互换。PIP 和 conda 是 Python 非常流行的包管理器。尽管这两个工具的某些功能重叠,但它们是为不同的目的而设计和使用的。下面是一个表格,展示了 conda 和 pip 之间的一系列差异。

Conda 与 Pip快速对比

| 差异点 | 点 | 康达 | | 多语言依赖性 | 不支持 | 支持 | | 软件包安装 | 建立在轮子上 | 下载二进制文件 | | 包装可用性 | 235000 包 | 1500 多个包装 | | 依赖性管理 | 没有 SAT 考试 | 执行 SAT 测试 | | 虚拟环境管理 | 没有内置的虚拟管理 | 内置虚拟管理系统 | | 简约主义 | 是 | 不 |

Table 1: Key summary of differences between pip and conda

在我们进一步了解这两个包管理器之间的区别之前,让我们了解一些关于 pip 和 conda 的基本信息。

皮普是什么?

Pip 一个简单的命令行工具,用于安装 python 包。这是从 python 包索引(PyPI) 中所有已发布的 Python 包中安装包的标准和推荐方式。如果你使用的是 Python 3.4(或更高版本),并且是从 python.org下载的,或者如果你在由 virtualenvvenv 创建的虚拟环境中工作,那么 pip 已经安装好了。

康达是什么?

Conda 是一个包、依赖和环境管理系统,最初是为 Python 开发的,但后来被扩展用于 Python、R、Java、Scala、FORTRAN、C/C++等语言。它提供了一种安装、更新和删除软件包以及处理依赖关系的简单方法。在它的默认配置中conda 从官方的 Conda 库安装软件包,而不是标准的特定语言库。

现在,我们已经对这两个软件包管理系统有了一些基本的了解,我们将看看这两个管理器之间的重要区别,这些区别造就了它们:

1.非 Python 依赖项的处理

正如我们之前了解到的Conda 支持除 Python 之外的语言。这可能看起来微不足道,但是对于依赖性管理来说,这是一个非常强大且非常需要的特性。

Python 包恰好依赖于用 python 之外的语言编写的程序/包。Pip 不能像 LLVM 一样处理这些非 python 依赖性。HDF5 等。完全正确。这可能会导致某些包装破损。

所以我们看到 Conda 实际上在处理依赖性方面比 pip 领先一步。

2.软件包安装

这两种安装包的方式有非常重要的区别。

PyPI 中的 python 包被打包成 wheel 或 source 发行版。这意味着我们需要在本地机器上编译这个包,然后才能使用它。在调用 pip 命令之前,包编译需要在我们的本地机器上安装兼容的编译器和库。

另一方面Conda 使用从 Anaconda 存储库和云中下载的编译后的二进制文件。这种方法使得安装过程没有任何编译器或库依赖问题。

3.包装可用性

打包和安装包的方法都是有效的,并且有各自的优缺点。

Conda 使安装变得更容易并优化了用户体验,而 pip 使开发人员的包维护变得更容易,否则他们将不必要地被迫为所有平台编译他们的包。

包编译在时间和空间上都是昂贵的。PyPI 中发布和维护了大量的包(超过 150000 个)。这些包中的一些实际上是个人项目或具有一些利基用户群的包。

遗憾的是Conda 不支持 PyPI 中的所有包。Conda 存储库和云包含近 1500 多个包,主要专注于科学计算和机器学习。

软件包可用性之间的差异非常明显就软件包可用性而言pip 是迄今为止最好的软件包管理器。

注意:要安装 Conda 中没有的包,您可以在任何 Conda 环境中使用 pip。Pip 和 Conda 可以同时使用,但通常不推荐使用。

4.依赖性管理

pip 和 conda 之间最重要的区别是它们如何解决依赖性问题。

Pip 使用递归的串行循环来安装依赖项。Pip 并不检查以确保所有包的所有依赖项同时得到满足。

如果按顺序较早安装的软件包与按顺序较晚安装的软件包的版本有不兼容的依赖关系,那么环境就被破坏了,最重要的是,这个问题一直没有被发现,直到您发现一些奇怪的错误。

Conda 使用可满足性(SAT)求解器来验证环境中安装的所有软件包的所有要求都得到满足从而解决了这个问题。该检查可能会花费额外的时间但有助于防止破坏环境的创建。只要关于依赖关系的包元数据是正确的conda 将可预见地产生工作环境。

所以当涉及到依赖性管理时conda 通常是更好的选择。

5.虚拟环境管理

我们前面提到的 pip 只是一个维护包的小工具。康达提供的远不止这些。它带有一个内置的虚拟环境管理器。

使用 pip您需要像 pipenv、virutalenv 这样的程序来创建虚拟环境。这是一个让 pip 只关注包管理而不使其臃肿的设计决策。pip 和其中一个环境管理器可以用来有效地创建和管理虚拟环境。

Conda 提供了开箱即用的虚拟环境管理器。它不仅提供虚拟环境功能,如 virutalenv 和 pipenv我们还可以选择每个虚拟环境的 python 版本。这个特性有助于用户更容易地使用过时的包或只有在较低版本的 python 中才可用的包。

6.最低纲领

Pip 是一个简单的命令行工具,旨在只做一件事。它是简单的,模块化的,极简主义的设计。

另一方面Conda 旨在提供一个简单的一体化解决方案。这是 pip 的替代方法。它的方法一点也不简单。Conda 自带一堆预装的包和软件。

对于一些用户来说非极简方法可能是一个不受欢迎的特性。Conda 试图通过提供一个较小版本的 Conda 来克服这一点:Miniconda。Miniconda 提供了 conda 的所有功能,但只安装了设置 conda 所需的最小软件包。

结论 Conda 与 Pip

这就把我们带到了这篇关于 pip 和 conda 的文章的结尾。请继续关注更多关于 python 的此类文章。