laz*_*wei 644 python pip package-managers ipython conda
我知道pip是python包的包管理器.但是,我看到IPython网站conda上的安装用于安装IPython.
我可以pip用来安装IPython吗?conda我已经拥有了为什么要用作另一个python包管理器pip?
pip和之间有什么区别conda?
Mar*_*ers 460
引自Conda博客:
我们长期参与python世界,我们都知道pip,easy_install和virtualenv,但这些工具并不能满足我们所有的特定要求.主要问题是它们专注于Python,忽略了非Python库依赖项,如HDF5,MKL,LLVM等,它们的源代码中没有setup.py,也没有将文件安装到Python的站点中-packages目录.
所以Conda是一个包装工具和安装程序,旨在做更多的事情pip; 处理Python包之外的库依赖项以及Python包本身.Conda还创建了一个虚拟环境virtualenv.
因此,Conda应该与Buildout进行比较,这是另一个可以让你处理Python和非Python安装任务的工具.
因为Conda推出了一种新的包装形式,你不能pip互换使用和Conda;  pip无法安装Conda包格式.您可以使用并排的两个工具侧(通过安装pip带conda install pip),但他们不具备互操作性无论是.
asm*_*rer 234
这是一个简短的纲要:
conda build从源构建包,但conda install它本身安装了已经构建的conda包中的东西.在这两种情况下:
conda的前两个要点实际上是什么使它比许多包装的pip更有利.由于pip是从源代码安装的,如果你无法编译源代码,安装它就会很痛苦(在Windows上尤其如此,但如果软件包有一些困难的C或FORTRAN库,它甚至可以在Linux上运行依赖).Conda从二进制安装,意味着有人(例如,Continuum)已经完成了编译包的艰苦工作,因此安装很容易.
如果您有兴趣构建自己的包,也会有一些差异.例如,pip建立在setuptools之上,而conda使用自己的格式,这有一些优点(比如静态,再次,Python不可知).
Cal*_*ngh 92
其他答案给出了详细的详细描述,但我想强调一些高级别的要点.
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获得.
use*_*461 59
(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 实际上可以从任何存档、wheel 或 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不能很好地支持二进制包(直到wheels和manylinux2010规范)。
强调构建包。Conda 具有广泛的构建设置,并存储广泛的元数据,以处理依赖项和构建链。
一些项目使用 conda 启动复杂的构建系统并生成轮子,将其发布到 pypi.org 以供 pip 使用。
easy_installEgg与 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 包装器或混合 python/C/C++ 代码的项目。
任何涉及 SSL、压缩、GUI(X11 和 Windows 子系统)、数学库、GPU、CUDA 等的内容通常都与一些 C 代码结合在一起。
这给打包和分发 Python 库带来了麻烦,因为它不仅仅是可以在任何地方运行的 Python 代码。库必须被编译,编译需要编译器和系统库以及第三方库,然后一旦编译,生成的二进制代码仅适用于编译它的特定系统和python版本。
最初,python 可以很好地分发纯 python 库,但几乎不支持分发二进制库。numpy在 2010 年左右,您在尝试使用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 中。
小智 25
不要混淆你,但你也可以在你的conda环境中使用pip,它可以验证上面的一般与python特定的管理者评论.
conda install -n testenv pip
source activate testenv
pip <pip command>
您还可以将pip添加到任何环境的默认包中,以便每次都存在,这样您就不必遵循上面的代码段.
Che*_*sta 20
引用Conda for Data Science的文章到连续统一网站:
康达vs pip
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
Sim*_*mba 16
pip 是一个包管理器。 
conda 既是包管理器又是环境管理器。
细节:
参考
san*_*ica 13
引自康达:神话和误解(综合描述):
...
现实:Conda和pip服务于不同的目的,并且只在一小部分任务中直接竞争:即在隔离环境中安装Python包.
Pip代表P ip I nstalls P ackages,是Python官方认可的软件包管理器,最常用于安装Python Package Index(PyPI)上发布的软件包.pip和PyPI都受Python Packaging Authority(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不是竞争对手,而是专注于不同用户群和使用模式的工具.
sto*_*big 12
对于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"包装对其所服务的市场仍然更好,并突出了"标准" 应该改进的领域.
(此外,依赖规范多次努力,在标准轮系统和conda系统或buildout中,并不是非常pythonic,如果所有这些包装'核心'技术可以通过某种PEP汇聚,那将是很好的)
为了回答最初的问题,
对于安装软件包,PIP 和 Conda 是完成同一件事的不同方法。两者都是安装软件包的标准应用程序。主要区别在于包文件的来源。
重要的警告注意事项:如果您使用两个源(pip 和 conda)在同一环境中安装软件包,这可能会在以后引起问题。
最佳实践是选择一个应用程序(PIP 或 Conda)来安装软件包,然后使用该应用程序安装您需要的任何软件包。但是,有许多例外或原因仍然在 conda 环境中使用 pip,反之亦然。例如:
| 归档时间: | 
 | 
| 查看次数: | 256427 次 | 
| 最近记录: |