PythonX.X、pipX的关系

news2024/11/13 15:35:09

PythonX.X、pipX的关系

Python2.x 与 3.x

  Python 的 3.0 版本,相对于 Python 的早期版本,是一个大的升级。许多针对早期 Python2.x 版本设计的程序都无法在 Python 3.x 上正常执行。为了照顾大量的历史遗留项目,Python 2.6 作为一个过渡版本,基本使用了 Python 2.x 的语法和库,同时考虑了向 Python 3.x 的迁移,允许使用部分 Python 3.x 的语法与函数。新的 Python 程序官方建议使用 Python 3.x版本,Python 2默认使用ASCII编码,而Python 3使用UTF-8编码,并原生支持Unicode字符。

本文将在Ubuntu20.04中,侧重介绍python3.x和pip

Ubuntu各版本内置Python的情况

  • Ubuntu 20.04 LTS(Focal Fossa):内置Python 3.8版本。
  • Ubuntu 18.04 LTS(Bionic Beaver):内置Python 2.7和Python 3.6版本。
  • Ubuntu 16.04 LTS(Xenial Xerus):内置Python 2.7和Python 3.5版本。

  从Ubuntu 20.04 LTS开始,Ubuntu已经默认将Python 2.x版本从系统中移除,并且将Python 3.x版本作为默认的Python版本。这是因为Python 2.x版本已于2020年1月1日终止支持,官方建议用户尽快迁移到Python 3.x版本。

查看Linux的发行版本(两种方式):

cat /etc/os-release
lsb_release -a

Python解释器的相关路径

python3 相关路径

  • 解释器路径/usr/bin/python3 (可以通过which python3 查看)
  • 标准库路径/usr/lib/python3.X/(其中X是Python 3的具体小版本号,例如3.8)
  • 第三方库路径(通过pip安装):/usr/local/lib/python3.X/dist-packages/~/.local/lib/python3.X/site-packages/

python2 相关路径

  • 解释器路径/usr/bin/python2(注意:在较新版本的Ubuntu中,Python 2可能已经被移除,因此这个路径可能不存在)
  • 标准库路径/usr/lib/python2.X/(其中X是Python 2的具体小版本号,例如2.7)
  • 第三方库路径(通过pip安装):/usr/local/lib/python2.X/dist-packages/~/.local/lib/python2.X/site-packages/

  对于笔者使用的Ubuntu20.04是不存在python2相关路径的,python3的解释器和标准库的路径如上所述,至于第三方库路径之所以会有两个后续会介绍。

Python版本查看方式

  • 方式一:通过命令查看

    python3 --version
    
  • 方式二:通过解释器安装路径上的文件链接关系查看

    ll /usr/bin/ | grep "python3"
    

在这里插入图片描述

因为笔者使用的Ubuntu20.04,预安版本为python3.8。

pip与pip3

  pip是一个Python包管理工具,提供了对Python包的查找、下载、安装、卸载的功能,但它本身也是一个 Python 包pip 的设计就是为了管理其他 Python 包,同时它自己也作为一个标准的 Python 包进行分发和安装。

  pip和pip3/usr/bin下的可执行脚本

现在对于pip、pip3、包、脚本有些混乱属于正常现象,接下来慢慢梳理。

在笔者的Ubuntu20.04的初始环境下,which pipwhich pip3是查找不到的,也就是说系统中并未按照包管理工具。

安装pip3:

sudo apt install python3-pip

这时再which pipwhich pip3 发现会检索到 usr/bin 目录下,说明我们已经成功安装了可执行脚本,并且放到了环境变量中。

可执行脚本:

我们cat下这两个文件:发现只有load_entry_point()中的最后一个参数不同。并且都是由python3这个解释器来运行这个脚本,而python3是个软链接指定了某个版本的python,笔者系统默认是python3.8。

在这里插入图片描述

让我们进一步看一下load_entry_point()这个方法:

在这里插入图片描述

此时发现在笔者的系统中,无论是pippip3pip3.8其实都是等价的,都是调用一个方法。

总结:ubuntu20.04中,pippip3pip3.8是等价的,都会调用同一个方法,并且都由python3.8解释器执行,也就是管理的是python3.8的包。

包管理工具/包: 通过pip list 查看,我们发现pip确实是python的一个特殊的包。注意没有pip3这个包

luzelin@ubuntu:~$ pip list | grep pip
pip                    20.0.2

查看某个依赖包的信息:

pip3 show XXX

安装依赖:

  • 方式一:安装到~/.local/lib/python3.X/site-packages/
pip3 install XXX

例如,pip3 install Pandas 后, 通过pip3 show Pandas 命令查看依赖包安装位置:

在这里插入图片描述

  • 方式二:安装到/usr/local/lib/python3.X/dist-packages/
sudo pip3 install XXX

例如, sudo pip3 install Matplotlib 后,通过pip3 show Matplotlib 命令查看依赖包安装位置:

在这里插入图片描述

两种方式的区别:

当切换到另一个用户时,再查看这两个包的信息,此时发现用户级的安装(方式一)仅限于安装用户使用,而系统级的安装(方式二)可以各用户共享。

在这里插入图片描述

安装/切换多版本python

安装指定版本python: 以3.9举例

sudo apt install python3.9

安装完成后,发现使用python3 命令默认还是3.8,这是因为/usr/bin/python3 这个软链接文件的指向没有发生修改。

修改默认python3 命令的版本:(不推荐)

  可以通过修改/usr/bin/python3这个软链接来指向新的Python版本。但是,这样做可能会导致系统级脚本和依赖Python 3的应用程序出现问题,这里只是为了文章效果演示,强烈不建议这样做!

cd /usr/bin/
sudo rm python3
sudo ln -s python3.9 python3

可以明确,我们执行的python3其实就是在/usr/bin这个环境变量目录下的软链接。

在这里插入图片描述

建议通过指定路径的形式,切换使用不同版本的python

使用特定的 Python 版本来调用 pip

给指定解释器安装pip包管理工具,如python3.9:

python3.9 -m ensurepip --upgrade

直接调用了 Python 3.9 自带的 pip 模块:

python3.9 -m pip install XXX

因为python默认指向的是python3.8,所以以下两种方式是等价的

python3.8 -m pip install xxx

pip install xxx

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

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

相关文章

常用的通信协议

最近在做项目,用到了一些通信协议,这里详细整理一下相关的通信协议,方便以后查阅。 常用的通信协议 单工 半双工 全双工单工通信(Simplex Communication)半双工(Half-duplex Communication)全双工(Full-dup…

网络网络层之(6)ICMPv6协议

网络网络层之(6)ICMPv6协议 Author: Once Day Date: 2024年6月2日 一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦… 漫漫长路,有人对你微笑过嘛… 全系列文章可参考专栏: 通信网络技术_Once-Day的博客-CS…

免费!GPT-4o发布,实时语音视频丝滑交互

We’re announcing GPT-4o, our new flagship model that can reason across audio, vision, and text in real time. 5月14日凌晨,OpenAI召开了春季发布会,发布会上公布了新一代旗舰型生成式人工智能大模型【GPT-4o】,并表示该模型对所有免费…

JDBC简介以及快速入门

这些都是JDBC提供的API 简介 每一个数据库的底层细节都不一样 不可能用一套代码操作所有数据库 我们通过JDBC可以操作所有的数据库 JDBC是一套接口 我们自己定义了实现类 定义实现类 然后就能用Java操作自己的数据库了 MySQL对于JDBC的实现类 就是驱动 快速入门 创建新的项…

芒果YOLOv10改进31:特征融合Neck篇:改进特征融合网络 BiFPN 结构,融合更多有效特征

💡只订阅这一个专栏即可阅读:芒果YOLOv10所有改进内容 芒果改进YOLOv10系列:改进特征融合网络 BiFPN 结构,融合更多有效特征 在这篇文章中,将 BiFPN 思想加入到 YOLOv10 结构中 该版本为高效简洁版,涨点多、还速度快(实际效果反馈) 文章目录 一、BiFPN 论文理论二、…

angular2开发知识点

目录 文章目录 一、API 网关地址 配置二、服务注册使用三、模块组件注册使用四、html中style类动态绑定1. 单个类的绑定:[class.special]"isSpecial"2. 多个类的绑定:[ngClass]"{selected:status ,saveable: this.canSave,}"3. 单个…

理解我的积木编程思想

1 学习教程,至少7139手册2 编程实践,遇到实际问题后,在技术资料中查找关键词3 选择适合的条目找到代 码。修正,组合。

C语言详解(文件操作)1

Hi~!这里是奋斗的小羊,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 💥💥个人主页:奋斗的小羊 💥💥所属专栏:C语言 🚀本系列文章为个人学习…

手写mybatis-预编译前的sql语句

sql表 mybatis数据库中的gxa_user表 /*Navicat Premium Data TransferSource Server : rootSource Server Type : MySQLSource Server Version : 80028Source Host : localhost:3306Source Schema : mybatisTarget Server Type : MySQLTarget…

论文略读:Onthe Expressivity Role of LayerNorm in Transformers’ Attention

ACL 2023 研究了LayerNorm在 Transformers 中对注意力的作用LayerNorm为Transformer的Attention提供了两个重要的功能: 投影,projection LayerNorm 帮助 Attention 设计一个注意力查询,这样所有的Key都可以平等地访问通过将Key向量投影到同一…

域内攻击 ----> DCSync

其实严格意义上来说DCSync这个技术,并不是一种横向得技术,而是更偏向于权限维持吧! 但是其实也是可以用来横向(配合NTLM Realy),如果不牵强说得话! 那么下面,我们就来看看这个DCSyn…

Vue学习|Vue快速入门、常用指令、生命周期、Ajax、Axios

什么是Vue? Vue 是一套前端框架,免除原生JavaScript中的DOM操作,简化书写 基于MVVM(Model-View-ViewModel)思想,实现数据的双向绑定,将编程的关注点放在数据上。官网:https://v2.cn.vuejs.org/ Vue快速入门 打开页面&#xff0…

rce漏洞试试看 buuctf的pingpingping 试试ctf的rce怎么样

打开靶机开始操作 然后我们先知道一些知识点:下面这些是常用的 |这个管道符也就是上一条的命令的输出结果作为下一条命令的输入;这个是跟sql的堆叠注入是一样的|| || 当前面的执行出错时(为假)执行后面的 & 将任务置于后台执…

R语言绘图 --- 桑基图(Biorplot 开发日志 --- 5)

「写在前面」 在科研数据分析中我们会重复地绘制一些图形,如果代码管理不当经常就会忘记之前绘图的代码。于是我计划开发一个 R 包(Biorplot),用来管理自己 R 语言绘图的代码。本系列文章用于记录 Biorplot 包开发日志。 相关链接…

从Log4j和Fastjson RCE漏洞认识jndi注入

文章目录 前言JNDI注入基础介绍靶场搭建漏洞验证注入工具 log4j RCE漏洞分析漏洞靶场检测工具补丁绕过 Fastjson RCE漏洞分析漏洞靶场检测工具补丁绕过 总结 前言 接着前文的学习《Java反序列化漏洞与URLDNS利用链分析》,想了解为什么 Fastjson 反序列化漏洞的利用…

如何制定工程战略

本文介绍了领导者如何有效制定工程战略,包括理解战略核心、如何收集信息并制定可行的策略,以及如何利用行业最佳实践和技术债务管理来提升团队效能和产品质量。原文: How to Build Engineering Strategy 如果你了解过目标框架(如 OKR&#xf…

引人入胜的教育视频

对于一家专注于数字自动化和能源管理的跨国公司,我们制作了引人入胜的教育视频,帮助房主选择适合他们需求的电气产品。我们的团队审查并定稿文本,录制并编辑配音,选择背景音乐,设计图形,并制作了演示如何安…

MPB | 葛体达组-原位酶谱法高分辨率实时检测土壤微界面酶活分布

原位酶谱法高分辨率实时检测土壤微界面酶活分布 High resolution real-time detection of soil enzyme activity distribution by in situ zymography 魏晓梦1, 2、魏亮1, 2、郝存抗1, 2、祝贞科1, 2、吴金水1, 2、葛体达1, 2, * 1中国科学院亚热带农业生态研究所,中…

04-认识微服务-SpringCloud

04-认识微服务-SpringCloud 1.SpringCloud: 1.SpringCloud是目前国内使用最广泛的微服务框架。官网地址:https://spring.io/projects/spring-cloud 2.SpringCloud集成了各种微服务功能组件,并基于SpringBoot实现了这些组件的自动装配&…

Vue3学习记录第三天

Vue3学习记录第三天 背景说明学习记录Vue3中shallowReactive()和shallowRef()Vue3中toRaw()和markRaw()前端...语法Vue3中readonly()和shallowReadonly()函数 背景 之前把Vue2的基础学了, 这个课程的后面有简单介绍Vue3的部分. 学习知识容易忘, 这里仅简答做一个记录. 内容都很…