python包管理器--- pip、conda、mamba的比较

2024-06-16 07:12

本文主要是介绍python包管理器--- pip、conda、mamba的比较,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1 pip

1.1 简介

        pip是一个 Python 的包(Package)管理工具,用于从 PyPI 安装和管理 Python 标准库之外的其他包(第三方包)。从 Python 3.4 起,pip 已经成为 Python 安装程序的一部分,也是官方标准的 Python 包管理器,由 PyPA 组织更新维护。

1.2 常用命令

        这里,我同时补充下关于pip的一些更新、卸载的方法:
(1)pip 自身的升级

py -m pip install --upgrade pip

(2)pip安装/卸载/升级

pip install 包名              #安装
pip uninstall 包名            #卸载
pip install --upgrade 包名    #升级


(3)pip查看已安装的包

pip list

(4)pip检查哪些包需要更新:

pip list --outdated

(5)pip查看某个包的详细信息:

pip show 包名

(6)pip安装指定版本的包:

pip install 包名==版本号
例如:
pip install numpy==1.20.3
pip install 'matplotlib>3.4'
pip install 'matplotlib>3.4.0,<3.4.3'  #可通过使用==, >=, <=, >, <来指定版本号

2 conda

        Conda是适用于任何语言的软件包、依赖项和环境管理系统--包括Python,R,Ruby,Lua,Scala,Java,JavaScript,C / C ++,FORTRAN等。

        Conda是在Windows、macOS和Linux上运行的开源软件包管理系统和环境管理系统。Conda可以快速安装、运行和更新软件包及其依赖项。Conda可以轻松地在本地计算机上的环境中创建,保存,加载和切换。它是为Python程序创建的,但可以打包和分发适用于任何语言的软件。

        Conda作为软件包管理器,可以帮助您查找和安装软件包。如果您需要一个能够使用不同版本Python的软件包,则无需切换到其他环境管理器,因为conda也是环境管理器。

2.1 pip和conda的关系[1]

1.conda 和pip简介

       在很多时候,由于conda和pip两个命令的某些功能存在重叠(比如可以用来安装第三方包),所以很多人认为他们是一样的。

       Pip是Python Packaging Authority(PyPA,是一个工作组,负责维护 python包中使用的一系列核心软件)推荐用来从Python Package Index(PyPI,是由PyPA开发的python包构成的索引包)下载第三方包的工具【官方推荐工具】。Pip可以用来下载和安装.whl和源码格式的包,其中用pip进行源码安装可能会要求系统中已经成功安装了兼容的编译器以及必要的包。

        conda 则是一个跨平台的包和环境管理器,用于从Anaconda和Anaconda Cloud中安装和管理conda包。因为conda 包是二进制文件,所以我们不需要编译器来对它们进行编译,这是一个与pip不同的地方。此外,conda 包并不仅限于 安装Python软件,还可以借助conda来安装包含 C 或 C++ 包、R 包在内的任何其他软件。

2.conda和pip的主要区别【米氏对比法】

        Conda和pip虽然在某些功能上重叠,但两者也存在着许多不同,各有各的优缺点,详细可以见下表。

(1)包内容【不重要,下一个】

     conda:     二进制

     pip:.         whl和源码

(2)是否需要编译【不重要,下一个】

     conda:     不需要

     pip:.         需要

(3)安装包类型【有点重要,但不大】

     conda:     Python、C、R等任何类型【win】

     pip:.         仅Python

 (4)是否支持环境管理【很重要,划重点 No.1】

     conda:     是否支持环境管理【win】

     pip:.         否,需要借助 virtualenv or venv等其它工具

       这两个工具之间的一个关键区别是conda能够创建独立的环境,这些环境可以包含不同版本的Python安装在其中的包。这在实际操作非常有用,因为不同的工具可能包含相互冲突的需求,这可能会阻止它们全部安装到单个环境中。Pip没有对环境的内置支持,而是依赖于virtualenv或venv等其他工具来创建孤立的环境。pipenv、poetry和hatch等工具包装了pip和virtualenv,为处理这些环境提供了统一的方法。

(5)依赖包检查【很重要,划重点 No.2】

     conda:     检查十分严格【win】

     pip:.         检查不严格

        conda对于环境中依赖关系的检查非常严格,所以基本上只要conda能安装上,软件包就能使用,但如果是使用pip的话,可能某些时候尽管显示你已成功安装,但由于包与包之间的依赖关系不满足,软件包会出现无法使用的情况。这主要是由于在安装软件包时,pip会在递归的串行循环中安装依赖项,并不能确保所有包的依赖关系同时满足。比如说若在安装顺序中较早安装的软件包与较晚安装的软件包具有不兼容的依赖项版本,就可能会导致环境错误,即使安装上也无法正常使用。而conda则会使用可满足性求解器(SAT)来验证是否满足环境中安装的所有软件包的全部要求。虽然这个检查可能需要一些额外的时间,但有利于防止出现上面环境不满足的现象。

(6)包来源【不重要,下一个】

     conda:     Anaconda repo and cloud

     pip:.         PyPI

(7)包数量【很重要,划重点 No.3】

     conda:     约1500个【no win,but only little lose】

     pip:.         约150000个【win】

中心思想:先conda,后pip,方得无往而不利【组合技才能屠龙】

       优先使用conda,因为上述1、2、3点,这三点在实践中非常重要,非常重要,非常重要!!!

       其次使用pip,虽然Anaconda存储库中有超过1500个软件包,包括最流行的数据科学、机器学习和人工智能框架。这些软件包,以及Anaconda cloud上来自channel的数千个附加软件包,包括conda-forge和bioconda,都可以使用conda进行安装。尽管有这么大的包集合,但与PyPI上超过150,000个可用的包相比,它仍然很小。有时需要一个包,它不是conda包,但在PyPI上可用,可以用pip安装。

3 mamba(给conda提提速)【推荐】

3.1 简介

        Conda作为使用最为广泛的数据科学环境管理工具,可以协助我们很方便的完成创建管理环境、下载安装第三方库、软件包等操作,但其在下载资源的过程中下载速度时常令人捉急,即使使用连接速度更快的国内镜像,也摆脱不了其单线程挨个下载资源导致的低效问题。

        而Mamba(黑曼巴)专为加速Conda而生,其改写了Conda下载资源的固有方式,以多线程的方式对网络资源进行并行下载,从而大幅提升Conda效率:

3.2 Mamba的使用[2]

1.安装Mamba

conda install -c conda-forge mamba

        安装完成之后,当你运行mamba -V查看其版本时会发现返回的是Conda的版本信息,这是因为Mamba的本质是对Conda功能的覆盖,因此我们在使用Mamba时其实只要将原有的Conda语句中的conda替换为mamba即可,譬如我们常用的conda clean --all,即清空本地缓存安装包。

        很有意思的是Mamba在执行命令时会先打印出logo等信息。

        当然Mamba并不是重写了Conda所有的功能,只是针对一些Conda低效的功能进行重写,并添加了一些实用的新功能,接下来我们来对这些知识进行学习。

2. Mamba中的实用功能

  • 加速下载

        作为Mamba最核心的功能,Mambaconda install语句进行并行化改造,达到加速下载过程的目的。

        以下载qgis为例,使用mamba install -c conda-forge qgis -y代替以前的安装方式,执行命令后,Mamba会在短暂获取资源下载链接之后,以并行的方式按计划同时下载多个资源,比老方法要快很多:

图片

        对于其他涉及下载资源的命令譬如conda update同样适用,大家可以自行体验。

  • 查看指定库所有可用版本

        这是Mamba异于Conda的新功能,使用mamba repoquery search 库名可以查看指定库全部所有可用版本。

  • 查看依赖关系

        Mamba中还提供了mamba repoquery dependsmamba repoquery whoneeds,分别用于查看指定库依赖哪些库,以及指定库被哪些库依赖,如官方文档的示例:

图片

4 升华中心思想

        先mamba(可以仍使用conda),后pip,方得无往而不利!【屠龙技也得升级】

5 参考资料链接

1.Anaconda | Understanding Conda and Pip[1]

2.Conda太慢?试试这个加速工具![2]

这篇关于python包管理器--- pip、conda、mamba的比较的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1065791

相关文章

Python 字符串占位

在Python中,可以使用字符串的格式化方法来实现字符串的占位。常见的方法有百分号操作符 % 以及 str.format() 方法 百分号操作符 % name = "张三"age = 20message = "我叫%s,今年%d岁。" % (name, age)print(message) # 我叫张三,今年20岁。 str.format() 方法 name = "张三"age

一道经典Python程序样例带你飞速掌握Python的字典和列表

Python中的列表(list)和字典(dict)是两种常用的数据结构,它们在数据组织和存储方面有很大的不同。 列表(List) 列表是Python中的一种有序集合,可以随时添加和删除其中的元素。列表中的元素可以是任何数据类型,包括数字、字符串、其他列表等。列表使用方括号[]表示,元素之间用逗号,分隔。 定义和使用 # 定义一个列表 fruits = ['apple', 'banana

Python应用开发——30天学习Streamlit Python包进行APP的构建(9)

st.area_chart 显示区域图。 这是围绕 st.altair_chart 的语法糖。主要区别在于该命令使用数据自身的列和指数来计算图表的 Altair 规格。因此,在许多 "只需绘制此图 "的情况下,该命令更易于使用,但可定制性较差。 如果 st.area_chart 无法正确猜测数据规格,请尝试使用 st.altair_chart 指定所需的图表。 Function signa

比较学习难度:Adobe Illustrator、Photoshop和新兴在线设计平台

从入门设计开始,几乎没有人不知道 Adobe 公司两大设计软件:Adobe Illustrator和 Photoshop。虽然AI和PS很有名,有一定设计经验的设计师可以在早期探索和使用后大致了解AI和PS的区别,但似乎很少有人会系统地比较AI和PS。目前,设计软件功能多样,轻量级和网页设计软件已成为许多设计师的需求。对于初学者来说,一篇有针对性的AI和PS比较总结文章具有非常重要的指导意义。毕竟

python实现最简单循环神经网络(RNNs)

Recurrent Neural Networks(RNNs) 的模型: 上图中红色部分是输入向量。文本、单词、数据都是输入,在网络里都以向量的形式进行表示。 绿色部分是隐藏向量。是加工处理过程。 蓝色部分是输出向量。 python代码表示如下: rnn = RNN()y = rnn.step(x) # x为输入向量,y为输出向量 RNNs神经网络由神经元组成, python

python 喷泉码

因为要完成毕业设计,毕业设计做的是数据分发与传输的东西。在网络中数据容易丢失,所以我用fountain code做所发送数据包的数据恢复。fountain code属于有限域编码的一部分,有很广泛的应用。 我们日常生活中使用的二维码,就用到foutain code做数据恢复。你遮住二维码的四分之一,用手机的相机也照样能识别。你遮住的四分之一就相当于丢失的数据包。 为了实现并理解foutain

python 点滴学

1 python 里面tuple是无法改变的 tuple = (1,),计算tuple里面只有一个元素,也要加上逗号 2  1 毕业论文改 2 leetcode第一题做出来

Python爬虫-贝壳新房

前言 本文是该专栏的第32篇,后面会持续分享python爬虫干货知识,记得关注。 本文以某房网为例,如下图所示,采集对应城市的新房房源数据。具体实现思路和详细逻辑,笔者将在正文结合完整代码进行详细介绍。接下来,跟着笔者直接往下看正文详细内容。(附带完整代码) 正文 地址:aHR0cHM6Ly93aC5mYW5nLmtlLmNvbS9sb3VwYW4v 目标:采集对应城市的

python 在pycharm下能导入外面的模块,到terminal下就不能导入

项目结构如下,在ic2ctw.py 中导入util,在pycharm下不报错,但是到terminal下运行报错  File "deal_data/ic2ctw.py", line 3, in <module>     import util 解决方案: 暂时方案:在终端下:export PYTHONPATH=/Users/fujingling/PycharmProjects/PSENe

将一维机械振动信号构造为训练集和测试集(Python)

从如下链接中下载轴承数据集。 https://www.sciencedirect.com/science/article/pii/S2352340918314124 import numpy as npimport scipy.io as sioimport matplotlib.pyplot as pltimport statistics as statsimport pandas