理解 Conda 和 Pip

Conda 和 pip 经常被认为是几乎相同的。尽管这两种工具的某些功能重叠,但它们的设计目的和使用目的应该有所不同。Pip 是 Python Packaging Authority 推荐的用于从 Python Package Index (PyPI) 安装软件包的工具。Pip 安装打包为 wheel 或源代码分发的 Python 软件。后者可能需要在调用 pip 成功之前,系统安装兼容的编译器,以及可能的库。

Conda 是一个跨平台软件包和环境管理器,用于安装和管理来自 Anaconda 仓库 以及 Anaconda Cloud 的 conda 软件包。Conda 软件包是二进制文件。永远不需要安装编译器即可安装它们。此外,conda 软件包不限于 Python 软件。它们也可能包含 C 或 C++ 库、R 软件包或任何其他软件。

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

这两种工具之间的另一个关键区别是,conda 能够创建隔离的环境,这些环境可以包含不同版本的 Python 和/或其中安装的软件包。当使用数据科学工具时,这可能非常有用,因为不同的工具可能包含冲突的要求,这可能会阻止它们全部安装到单个环境中。Pip 没有内置的环境支持,而是依赖于其他工具(如 virtualenvvenv)来创建隔离的环境。诸如 pipenvpoetryhatch 之类的工具封装了 pip 和 virtualenv,以提供用于处理这些环境的统一方法。

Pip 和 conda 在环境内依赖关系的处理方式上也不同。安装软件包时,pip 以递归的串行循环方式安装依赖项。没有努力确保同时满足所有软件包的依赖项。如果较早安装的软件包相对于较晚安装的软件包具有不兼容的依赖项版本,则可能导致环境以微妙的方式损坏。相比之下,conda 使用可满足性 (SAT) 求解器来验证环境中安装的所有软件包的所有要求是否都得到满足。此检查可能需要额外的时间,但有助于防止创建损坏的环境。只要有关依赖项的软件包元数据正确,conda 就会可预测地生成可工作的环境。

鉴于 conda 和 pip 之间的相似性,一些人尝试结合这些工具来创建数据科学环境也就不足为奇了。将 pip 与 conda 结合使用的主要原因之一是,当一个或多个软件包仅可通过 pip 安装时。Anaconda 仓库中提供了超过 1,500 个软件包,包括最流行的数据科学、机器学习和 AI 框架。这些软件包以及 Anaconda Cloud 上来自渠道(包括 conda-forgebioconda)的数千个附加软件包,可以使用 conda 安装。尽管有如此大量的软件包集合,但与 PyPI 上超过 150,000 个软件包相比,它仍然很小。有时需要一个软件包,它不是作为 conda 软件包提供,但在 PyPI 上可用,并且可以使用 pip 安装。在这些情况下,尝试同时使用 conda 和 pip 是有意义的。

conda 和 pip 的比较

conda pip

管理

二进制文件 wheel 或源代码
可能需要编译器
软件包类型 任何类型 仅限 Python
创建环境 是,内置 否,需要 virtualenv 或 venv
依赖项检查

软件包来源

Anaconda 仓库和 Cloud

PyPI

与专家交谈

与我们的专家之一交谈,为您的 AI 之旅寻找解决方案。

与专家交谈