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

news2024/11/23 22:41:00

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]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1829079.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【chatbot-api开源项目】开发文档

chatbot-api 1. 需求分析1-1. 需求分析1-2. 系统流程图 2. 技术选型3. 项目开发3-1. 项目初始化3-2. 爬取接口获取问题接口回答问题接口创建对应对象 3-3. 调用AI3-4. 定时自动化回答 4. Docker部署5. 扩展5-1. 如果cookie失效了怎么处理5-2. 如何更好的对接多个回答系统 Gitee…

各种机器学习算法的应用场景分别是什么(比如朴素贝叶斯、决策树、K 近邻、SVM、逻辑回归最大熵模型)?

2023简直被人工智能相关话题席卷的一年。关于机器学习算法的热度&#xff0c;也再次飙升&#xff0c;网络上一些分享已经比较老了。那么今天借着查询和学习的机会&#xff0c;我也来浅浅分享下目前各种机器学习算法及其应用场景。 为了方便非专业的朋友阅读&#xff0c;我会从算…

揭秘神秘的种子:Adobe联合宾夕法尼亚大学发布文本到图像扩散模型大规模种子分析

文章链接&#xff1a;https://arxiv.org/pdf/2405.14828 最近对文本到图像&#xff08;T2I&#xff09;扩散模型的进展促进了创造性和逼真的图像合成。通过变化随机种子&#xff0c;可以为固定的文本提示生成各种图像。在技术上&#xff0c;种子控制着初始噪声&#xff0c;并…

FineReport简单介绍(2)

一、报表类型 模板设计是 FineReport 学习过程中的主要难题所在&#xff0c;FineReport 模板设计主要包括普通报表、聚合报表、决策报表三种设计类型。 报表类型简介- FineReport帮助文档 - 全面的报表使用教程和学习资料 二、聚合报表 2-1 介绍 聚合报表指一个报表中包含多个…

电商秒杀系统

一&#xff0c;细节 二&#xff0c;需要注意的细节 1.库存超卖问题 使用mysql数据库的 悲观锁 机制。在事务中使用 for update 语句&#xff0c;此时数据库会加锁&#xff0c;其他想要当前读的线程都会被阻塞&#xff0c;在事务处理完成之后释放这一条数据。该方法的缺点在于…

排序——希尔排序

希尔排序实际上是插入排序的优化&#xff0c;所以要先介绍插入排序。 目录 插入排序 思想 演示 代码实现 总结 希尔排序 思想 演示 代码 总结 插入排序 思想 又称直接插入排序。它的基本思想是将一个值插入到一个有序序列中。直至将所有的值都插入完。 演示 假设数…

工程设计问题---行星轮系设计问题

该问题的主要目标是使汽车传动比的最大误差最小。为了使最大误差最小&#xff0c;对自动行星传动系统的齿轮齿数进行了计算。该问题包含6个整数变量和11个不同几何约束和装配约束的约束。 参考文献&#xff1a; Abhishek Kumar, Guohua Wu, Mostafa Z. Ali, Rammohan Malliped…

国际统计年鉴(1995-2023年)

数据年份&#xff1a;1995-2023 数据格式&#xff1a;pdf、excel 数据内容&#xff1a;《国际统计年鉴》是一部综合性的国际经济社会统计资料年刊&#xff0c;收录了世界200多个国家和地区的统计数据&#xff0c;并对其中40多个主要国家和地区的经济社会发展指标及国际组织发布…

ARIMA模型与ARIMA-GARCH模型预测时间序列

上世纪 70 年代初&#xff0c;Ljung 等人提出 ARIMA 模型&#xff0c;又称求和自回归移动平均模型。其思想 是针对于非平稳时间序列进行数学建模&#xff0c;将其通过差分运算后 进行相关数据刻画 &#xff0c;变为一个平稳的新序列&#xff0c;进而进行相关数据的刻画。 自 1…

Element-UI - 解决el-table中图片悬浮被遮挡问题

在开发中&#xff0c;发现element-ui在el-table中添加图片悬浮显示时&#xff0c;会被单元格遮挡的问题。通过查询得到的解决办法&#xff0c;大多是修改.el-table类中相关样式属性&#xff0c;但经过验证发现会影响到其他正常功能的使用。对于此问题解决其实也并不难&#xff…

计算机网络知识点全面总结回顾

物理层 OSI模型&#xff1a;数据链路层&#xff08;流量控制&#xff09;&#xff0c;从传输层开始端到端&#xff1b;每一层的元素都称为实体&#xff0c;同一层的是对等实体&#xff1b;三个重要概念&#xff1a;服务&#xff08;下层为上层提供调用&#xff09;&#xff0c…

非连续分配管理方式(重点)

目录 一. 基本分页存储管理1.1 什么是分页存储1.2 页表 二. 基本地址变换机构三. 具有快表的地址变换机构3.1 什么是快表3.2 引入快表后, 地址的变换过程3.3 局部性原理 四. 两级页表4.1 单级页表存在什么问题?如何解决?4.2 两级页表的原理、逻辑地址结构4.3 如何实现地址变换…

机器学习笔记 - 用于3D点云数据分割的Point Net的训练

一、数据集简述 ​在本教程中,我们将学习如何在斯坦福 3D 室内场景数据集 ( S3DIS )上训练 Point Net 进行语义分割。S3DIS 是一个 3D 数据集,包含来自多栋建筑的室内空间点云,占地面积超过 6000 平方米。Point Net使用整个点云,能够执行分类和分割任务。如果你一直在关注 …

【机器学习】机器学习与教育科技在个性化教学中的融合应用与性能优化新探索

文章目录 引言机器学习与教育科技的基本概念机器学习概述监督学习无监督学习强化学习 教育科技概述学生学习行为分析个性化学习路径推荐智能化教育评估 机器学习与教育科技的融合应用实时学习数据分析数据预处理特征工程 学生成绩预测与优化模型训练模型评估 个性化学习路径推荐…

初始-Nativefier

--无奈只能靠自己 Nativefier 是什么&#xff1a; Nativefier 是一个命令行工具&#xff0c;仅仅通过一行代码就可以轻松地为任何的网站创建桌面应用程序&#xff0c;应用程序通过 Electron 打包成系统可执行文件&#xff08;如.app, .exe 等&#xff09;&#xff0c;可以运行在…

AI探索:最佳落地应用场景

如果说今年的风口&#xff0c;那一定是 AI。不过AI像一把双刃剑&#xff0c;既有助益也有风险。我们将从IBM Watson的高飞与坠落&#xff0c;到Google Allo的黯然失色&#xff0c;探索AI应用中的教训。同时&#xff0c;瑞幸咖啡的成功故事展现了凭借策略得当的AI应用&#xff0…

MySQL第三方图形化工具:DBeaver

操纵数据库的语言&#xff0c;基于功能划分为4类&#xff1a; 数据定义:DDL(Data Definition Language)库的创建删除、表的创建删除等 数据操纵:DML(Data ManipulationLanguage)新增数据、删除数据、修改数据等 数据控制:DCL(Data ControlLanguage)新增用户、删除用户、密码…

javaWeb项目-springboot+vue人事管理系统功能介绍

本项目源码&#xff1a;java-springbootvue人事管理系统源码说明文档资料资源-CSDN文库 项目关键技术 开发工具&#xff1a;IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架&#xff1a;ssm、Springboot 前端&#xff1a;Vue、ElementUI 关键技术&#xff1a;springboot…

Redis 键空间迭代 Scan

引言 在平时线上Redis维护工作中&#xff0c;有时候需要从Redis实例成千上万的key中找出特定前缀的key列表来手动处理数据&#xff0c;可能是修改他的值&#xff0c;也可能是删除key。 Redis提供了一个简单暴力的指令keys用来列出所有满足特定正则字符串规则的key。 127.0.0…

【C++】实现学生管理系统(完整版)

&#x1f495;&#x1f495;&#x1f495;大家好&#xff0c;这是作业侠系列之C实现学生管理系统&#xff0c;还是那句话&#xff0c;大家不想cv或者cv了跑不起来,三连后都可以来找我要源码&#xff0c;私信或评论留下你的邮箱即可。有任何问题有可以私聊我&#xff0c;大家觉得…