原文传送门
一句话概括
pip可以允许你在任何环境中安装python包,而conda允许你在conda环境中安装任何语言包(包括c语言或者python)。
conda | pip | |
---|---|---|
包的形式 | 二进制 | whl or source |
需要编译器 | 否 | 是 |
包的种类 | 任意语言 | 只有Python |
创建虚拟环境 | 能(内置功能) | 自己不能,需借助其他工具 |
依赖检查(详细请见下文) | 是 | 否 |
包源 | Anaconda仓库和Anaconda云 | Pypi |
翻译
简介
conda和pip通常被认为是几乎相同的。 尽管这两个工具的某些功能有重叠,但是它们是为不同的目的而设计的。 Pip是Python Packaging Authority推荐的工具,可用于从PyPI安装包。 Pip可以安装被打包为whl或source distributions(源代码发行包)的Python软件。 在用pip安装source distributions之前,电脑里需要有安装好的兼容编译器以及一些要用的库。
包的区别
Conda是一个跨平台的包和环境管理器,可以安装和管理 Anaconda repository以及Anaconda Cloud中的cond件包。 Conda包是二进制文件,不需要安装任何编译器。 另外,conda包不限于Python软件。 它们可能还包含C或C ++库,R软件包或任何其他软件。
这凸显了conda和pip之间的关键区别。 Pip安装Python包,而conda安装任何语言的包, 比如,在使用pip之前,必须预先装好Python解释器。 但Conda可以直接安装Python软件包以及Python解释器。
虚拟环境区别
另一个主要区别是conda能够创建隔离的环境,该环境可以包含不同版本的Python和/或其中安装的包。 当使用数据科学工具时,这可能非常有用,因为不同的工具可能包含冲突的要求,这可能会阻止将它们全部安装到单个环境中。 Pip没有对环境的内置支持,而是依赖于诸如virtualenv或venv的外部工具来创建隔离的环境。 Pipenv,poetry和hatch之类的工具对pip和虚拟环境进行了包装/。
依赖的区别
pip和conda在满足环境中的依赖关系方面也有所不同。 在安装包时,pip在递归的串行循环中安装依赖项。 不会保证同时满足所有包的依赖关系**(意思就是pip只关心新安装的包所牵扯的包)**。 如果安装较早的包与安装较晚的包依赖不同,则可能导致环境以微妙的方式被破坏。
相反,conda使用可满足性(SAT)求解器来验证是否满足环境中安装的所有软件包的所有要求。 这项检查可能需要花费更多时间,但有助于防止环境被破坏。 只要依赖包的元数据正确,conda就不会出错。
总结
鉴于conda和pip之间的相似之处,有人尝试将这些工具组合在一起以创建数据科学环境就不足为奇了。 将pip与conda结合的主要原因是,有时一个或多个软件包只能通过pip安装。 Anaconda存储库中提供了1,500多个软件包,其中包括最受欢迎的数据科学,机器学习和AI框架。这些包,以及Anaconda云上提供的数千种其他软件包,包括conda-forge和bioconda, 都可以使用conda来安装。 尽管有大量的软件包,但与PyPI上可用的150,000多个软件包相比,conda就是小巫见大巫了。 有时需要一个软件包,conda里没有,但PyPI里有,我们就可以用pip来安装。 在这些情况下,同时使用conda和pip是有意义的。