我知道pip
是 python 包的包管理器。但是,我在 IPython 的网站上看到了用于安装 IPython 的conda
安装。
我可以pip
用来安装 IPython 吗?conda
既然我已经拥有了,为什么还要用作另一个 python 包管理器pip
?
pip
和 和有什么不一样conda
?
我知道pip
是 python 包的包管理器。但是,我在 IPython 的网站上看到了用于安装 IPython 的conda
安装。
我可以pip
用来安装 IPython 吗?conda
既然我已经拥有了,为什么还要用作另一个 python 包管理器pip
?
pip
和 和有什么不一样conda
?
引用康达博客:
涉足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 包格式。您可以并排使用这两个工具(通过安装pip
)conda install pip
,但它们也不能互操作。
自从写下这个答案后,Anaconda 发布了一个关于理解 Conda 和 Pip的新页面,这也与此相呼应:
这突出了 conda 和 pip 之间的关键区别。Pip 安装 Python 包,而 conda 安装可能包含以任何语言编写的软件的包。例如,在使用 pip 之前,必须通过系统包管理器或下载并运行安装程序来安装 Python 解释器。另一方面,Conda 可以直接安装 Python 包和 Python 解释器。
并进一步
有时需要一个包,它不能作为 conda 包提供,但可以在 PyPI 上使用,并且可以使用 pip 安装。在这些情况下,尝试同时使用 conda 和 pip 是有意义的。
免责声明:这个答案描述了十年前的情况,当时 pip 不支持二进制包。Conda 专门用于更好地支持构建和分发二进制包,特别是具有 C 扩展的数据科学库。作为参考,pip 仅获得了对带有轮子的便携式二进制包(2013 年的 pip 1.4)和manylinux1规范(2016 年 3 月的 pip 8.1)的广泛支持。有关更多历史,请参阅更新的答案。
这是一个简短的概述:
conda build
从源代码构建包的工具,但conda install
它本身从已经构建的 Conda 包中安装东西。在这两种情况下:
Conda 的前两个要点确实使它在许多软件包中优于 pip。由于 pip 是从源代码安装的,因此如果您无法编译源代码,使用它安装东西可能会很痛苦(这在 Windows 上尤其如此,但如果软件包有一些困难的 C 或 FORTRAN 库,它甚至在 Linux 上也是如此依赖项)。Conda 从二进制安装,这意味着有人(例如,Continuum)已经完成了编译包的艰苦工作,因此安装很容易。
如果您有兴趣构建自己的包,也会有一些差异。例如,pip 是建立在 setuptools 之上的,而 Conda 使用它自己的格式,它有一些优点(比如是静态的,并且再次与 Python 无关)。
其他答案对细节进行了公平的描述,但我想强调一些高层次的观点。
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
从中使用。
不要进一步混淆你,但你也可以在你的 conda 环境中使用 pip,它验证了上面的一般与 python 特定的经理评论。
conda install -n testenv pip
source activate testenv
pip <pip command>
您还可以将 pip 添加到任何环境的默认包中,这样它每次都存在,因此您不必遵循上述代码段。
引用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
引自康达:神话和误解(综合描述):
...
现实: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 不是竞争对手,而是专注于不同用户群体和使用模式的工具。
(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。
easy_install
pip 的第一个版本一起使用。easy_install
是另一个包管理器,在 pip 和 conda 之前。它已在 setuptools v58.3(2021 年)中删除。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 年及前后,您在尝试使用numpy
or时会遇到很多错误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 中。
对于 WINDOWS 用户
“标准”包装工具的情况最近正在改善:
在 pypi 本身上,截至 9 月,现在有 48% 的轮子包。2015 年 11 月(高于 2015 年 5 月的 38%,2014 年 9 月的 24%),
最新的 python 2.7.9 现在支持开箱即用的轮格式,
“标准”+“调整”打包工具的情况也在改善:
您可以在http://www.lfd.uci.edu/~gohlke/pythonlibs找到几乎所有轮式格式的科学包,
mingwpy 项目有一天可能会为 Windows 用户带来一个“编译”包,允许在需要时从源代码安装所有内容。
“康达”包装对其服务的市场来说仍然更好,并突出了“标准”应该改进的领域。
(此外,在标准轮子系统和 conda 系统或构建中,依赖规范的多重努力并不是非常 Pythonic,如果所有这些打包“核心”技术都可以通过一种 PEP 收敛,那就太好了)
要回答最初的问题,
对于安装包,PIP 和 Conda 是完成同一件事的不同方法。两者都是安装软件包的标准应用程序。主要区别在于包文件的来源。
一个重要的注意事项:如果您使用两个源(pip 和 conda)在同一环境中安装软件包,这可能会在以后引起问题。
最佳实践是选择一个应用程序(PIP 或 Conda)来安装包,然后使用该应用程序来安装您需要的任何包。但是,在 conda 环境中仍然使用 pip 有许多例外或原因,反之亦然。例如:
我可以使用 pip 安装 iPython 吗?
当然,两者(页面上的第一种方法)
pip install ipython
和(第三种方法,第二种是conda
)
您可以从 GitHub 或 PyPI 手动下载 IPython。要安装其中一个版本,请将其解压缩并使用终端从顶级源目录运行以下命令:
pip install .
当我已经有了 pip 时,为什么还要使用 conda 作为另一个 python 包管理器?
正如这里所说:
如果你需要一个特定的包,可能只用于一个项目,或者如果你需要与其他人共享项目,conda 似乎更合适。
Conda 在 ( YMMV )中超过 pip
pip 和 conda 有什么区别?
这是其他所有人都广泛回答的问题。
我可能还发现了另一个细微的差别。我有我的 python 环境,/usr
而不是/home
或其他。为了安装它,我必须使用sudo install pip
. 对我来说,不受欢迎的副作用与sudo install pip
其他地方广泛报道的略有不同:这样做之后,我必须运行python
withsudo
才能导入任何sudo
-installed 包。我放弃了这一点,最终发现我可以sudo conda
将软件包安装到一个环境中,然后在该环境下正常导入,/usr
而无需sudo
. python
我什至习惯于sudo conda
修复损坏pip
而不是使用sudo pip uninstall pip
or sudo pip --upgrade install pip
。
pip
仅适用于 Python
conda
仅适用于 Anaconda + 其他科学软件包,如 R 依赖项等。并非每个人都需要 Python 附带的 Anaconda。Anaconda 主要面向那些从事机器学习/深度学习等工作的人。休闲 Python 开发人员不会在他的笔记本电脑上运行 Anaconda。