在我们日常使用 Python 时,Conda 和 Pip 有时可以互换。PIP和conda是非常流行的 Python 包管理器。尽管这两个工具的某些功能重叠,但它们的设计目的不同并且应该用于不同的目的。下面的表格展示了 conda 和 pip 之间的全面差异。
Conda 与 Pip – 快速比较
差异点 | 点 | 康达 |
多语言依赖性 | 不支持 | 支持的 |
包安装 | 建立在轮子上 | 下载二进制文件 |
套餐可用性 | 235,000 包 | 1,500+ 包 |
依赖管理 | 没有 SAT 考试 | 进行 SAT 考试 |
虚拟环境管理 | 无内置虚拟管理 | 内置虚拟管理系统 |
简约 | 是的 | 不 |
在我们继续详细了解这两个包管理器之间的差异之前,让我们了解一些有关 pip 和 conda 的基本信息。
什么是画中画?
Pip 是一个用于安装 python 包的简单命令行工具。这是从Python 包索引 (PyPI)中所有已发布的 python 包安装包的标准和推荐方法。如果您使用 Python 3.4(或更高版本)并从python.org下载,或者如果您在virtualenv或venv创建的虚拟环境中工作,则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 或源发行版。这意味着我们需要在本地计算机上编译该包才能使用它。在调用 pip 命令之前,包编译需要在本地计算机上安装兼容的编译器和库。
另一方面,Conda 使用从 Anaconda 存储库和云下载的已编译二进制文件。这种方法使安装过程没有任何编译器或库依赖性问题。
3. 套餐可用性
打包和安装包的两种方法都是有效的,并且各有其优点和缺点。
Conda 使安装变得更容易并优化了用户体验,而 pip 使开发人员更容易维护软件包,否则他们将不必要地被迫为所有平台编译软件包。
包编译在时间和空间上都是昂贵的。PyPI 中发布并维护了大量的包(超过 150,000 个)。其中一些软件包实际上是个人项目或具有一些利基用户群的软件包。
遗憾的是,Conda 确实(不能)不支持 PyPI 中存在的所有软件包。Conda 存储库和云包含近 1,500 多个软件包,主要关注科学计算和机器学习。
包可用性之间的差异非常明显,就包可用性而言,pip 是迄今为止最好的包管理器。
注意:要安装 Conda 中不存在的软件包,您可以在任何 Conda 环境中使用 pip。Pip 和 Conda 可以同时使用,但通常不推荐。
4. 依赖管理
pip 和 conda 之间最重要的区别在于它们如何解决依赖问题。
Pip 使用递归串行循环来安装依赖项。Pip 不会检查以确保所有包的所有依赖项都同时满足。
如果较早安装的软件包与较晚安装的软件包的版本具有不兼容的依赖关系,那么环境就会被破坏,最重要的是,在您发现一些奇怪的错误之前,这个问题仍然未被检测到。
Conda 使用可满足性 (SAT) 求解器来验证环境中安装的所有软件包的所有要求是否得到满足,从而解决了此问题。此检查可能需要额外的时间,但有助于防止创建损坏的环境。只要有关依赖项的包元数据正确,conda 就会按预期生成工作环境。
因此,在依赖管理方面,conda 通常是更好的选择。
5. 虚拟环境管理
我们前面提到的pip只是一个维护包的小工具。Conda 提供的远不止这些。它配备了内置的虚拟环境管理器。
使用 pip,您需要使用 pipelinenv、virutalenv 等程序来创建虚拟环境。这是一个设计决策,旨在让 pip 仅专注于包管理,而不是使其变得臃肿。pip 和这些环境管理器之一可用于有效地创建和管理虚拟环境。
Conda 提供了一个开箱即用的虚拟环境管理器。它不仅提供像virutalenv和pipenv这样的虚拟环境功能,我们还可以选择每个虚拟环境的python版本。此功能可以帮助用户更轻松地使用过时的包或仅在较低版本的 python 中可用的包。
6.极简主义
Pip 是一个简单的命令行工具,旨在只做一件事。它的设计简单、模块化、简约。
另一方面,Conda 旨在提供一种简单且一体化的解决方案。它旨在成为 pip 的替代方法。它的方法一点也不简单。Conda 附带了一堆预安装的软件包和软件。
对于某些用户来说,非极简主义方法可能是不受欢迎的功能。Conda 试图通过提供 Conda 的较小版本:Miniconda 来克服这个问题。Miniconda 提供 conda 的所有功能,但仅安装设置 conda 所需的最少软件包。
结论——Conda 与 Pip
关于 pip 和 conda 的文章到此结束。请继续关注更多有关 Python 的此类文章。