PythonX.X、pipX的关系

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Chat-TTS:windows本地部署实践【有手就行】

最近Chat-TTS模型很火,生成的语音以假乱真,几乎听不出AI的味道。我自己在本地部署玩了一下,记录一下其中遇到的问题。 环境: 系统:windows 11 GPU: Nvidia 4060 Cuda:12.1(建议安…

数据结构与算法题目集(中文)6-2顺序表操作集

题目地址 https://pintia.cn/problem-sets/15/exam/problems/type/6?problemSetProblemId725&page0 注意审题,返回false的时候不要返回ERROR,否则答案错误,机器规则是死的。 位置一般指数组下标,位序一般指数组下标1。但是思…

error while loading shared libraries 找不到动态库问题如何解决

在使用 c 或 c 开发应用时,在启动程序时,有时会遇到这个错误,找不到动态库。这个时候,我们使用 ldd 来查看,发现可执行文件依赖的动态库显示为 not found。 1 实验代码 使用如下 3 个文件做实验。 hello.h 中声明了函…

学习DHCP动态主机配置协议

目录: dhcp 动态主机配置协议 ftp文件传输协议 dhcp 动态主机配置协议 服务器配置好了地址池 192.168.124.10 -192.168.124.20 客户端从地址池当中随机获取一个ip地址,ip地址会发生变化,使用服务端提供的ip地址&…

情景题之小明的Linux实习之旅:linux实战练习1(下)【基础命令,权限修改,日志查询,进程管理...】

小明的Linux实习之旅:基础指令练习情景练习题下 前景提要小明是怎么做的场景1:初识Linux,创建目录和文件场景2:权限管理,小明的权限困惑场景3:打包与解压,小明的备份操作场景4:使用G…

vue3 递归循环展示下级盒子

index.vue主文件 <template><div><RecursiveCard :data"rootTask" /></div> </template><script> import { reactive } from vue; import RecursiveCard from ./test.vue; // 递归组件的路径export default {components: {Recu…

textattack报错:不能导入自定义search_methods (cannot import name ‘xxx‘ from ‘xxx‘)

1. 报错信息 ImportError: cannot import name AAA from textattack.search_methods (/home/666/anaconda3/envs/textattack37_env/lib/python3.7/site-packages/textattack/search_methods/__init__.py)2. 出错简述 贴一段test1.py的模块导入 #建议使用&#xff01; import…

后方碰撞预警系统技术规范(简化版)

后方碰撞预警系统技术规范(简化版) 1 系统概述2 预警区域3 预警目标4 功能需求功能条件5 显示需求6 指标需求1 系统概述 后方碰撞预警系统RCW(Rear Collision Warning)是在后方车辆即将与自车发生碰撞之前,激活危险警告灯以较高频率闪烁,从而吸引后方驾驶员的注意力,避免…

Redis 5种常用数据类型

目录 Redis简介 1.字符串 string 2.哈希 hash 3.列表 list 4.集合 set 5.有序集合 sorted set / zset Redis简介 Redis&#xff0c;全称Remote Dictionary Server&#xff0c;是一个开源的、内存中的数据结构存储系统。它可以用作数据库、缓存和消息中间件&#xff0c;支…

常用的通信协议

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

【MySQL】聊聊唯一索引是如何加锁的

首先我们要明确&#xff0c;加锁的对象是索引&#xff0c;加锁的基本单位是next-key lock&#xff0c;由记录锁和间隙锁组成。next-key是前开后闭区间&#xff0c;间隙锁是前开后开区间。根据不同的查询条件next-key 可能会退化成记录锁或间隙锁。 在能使用记录锁或者间隙锁就…

视觉大模型(VLLM)学习笔记

视觉多模态大模型&#xff08;VLLM&#xff09; InternVL 1.5 近日&#xff0c;上海人工智能实验室 OpenGVLab 团队、清华大学、商汤科技合作推出了开源多模态大语言模型项目InternVL 1.5&#xff0c;它不仅挑战了商业模型巨头例如 GPT-4V 的霸主地位&#xff0c;还让我们不禁…

通用信息提取数据预处理

train_data./datasets/duuie output_folder./datasets/duuie_pre ignore_datasets["DUEE", "DUEE_FIN_LITE"] schema_folder./datasets/seen_schema # 对CCKS2022 竞赛数据进行预处理 import shutil # shutil.copytree(train_data,output_folder) impor…

Mysql 的分布式策略

1. 前言 MySQL 作为最最常用的数据库&#xff0c;了解 Mysql 的分布式策略对于掌握 MySQL 的高性能使用方法和更安全的储存方式有非常重要的作用。 它同时也是面试中最最常问的考点&#xff0c;我们这里就简单总结下 Mysq 的常用分布式策略。 2. 复制 复制主要有主主复制和…

5 个你不知道的隐藏 CSS 属性

层叠样式表 (CSS) 是网页设计的骨架&#xff0c;它可以帮助我们轻松的设置网页的样式和格式。虽然大多数的 CSS 属性&#xff0c;例如颜色、字体大小和边距都被大家熟知&#xff0c;但还有许多鲜为人知的属性可以帮助我们设计添加功能。在这篇文章中&#xff0c;我们将介绍 5 个…

GD32F4XX的ISP方式下载程序时的串口选择

官方资料 详细信息可参考GD32F4xx的用户手册&#xff0c;第 1.4 章节 引导配置 。 版本是 &#xff1a;GD32F4xx_User_Manual_Rev3.0_CN 资料链接: https://www.gd32mcu.com/cn/download/6?kwGD32F4

【解读】小提琴图

ref&#xff1a;解读文献中的箱线图&#xff08;Box-plot&#xff09;和小提琴图&#xff08;Violin-plot)&#xff09;_小提琴图和箱线图的区别-CSDN博客小提琴图展示了每个变量的数据分布情况&#xff0c;通过图中的“小提琴”形状可以看出数据的密度和分布情况。 在图中&…

Layui实现下拉多选功能

1、问题概述? 提供源码下载 在项目中有很多地方需要使用到下拉框,并且实现选择多个信息,下面是展示。 支持如下功能: 1、分页 2、主题自定义 3、国际化 4、下拉方向 5、Tips修改等 6、Style自定义样式 7、取值 8、赋值 2、资源准备及测试? 2.1、资源下载

管理数据必备;侦听器watch用法详解,vue2与vue3中watch的变化与差异

目录 一、侦听器&#xff08;watch&#xff09;是什么&#xff1f; 二、Vue2中的watch&#xff08;Options API&#xff09; 2.1、函数式写法 2.2、对象式写法 ①对象式基础写法 ②回调函数handler ③deep属性 ④immediate属性 三、Vue3中的watch 3.1、向下兼容&#xff…

Qt实现简易播放器

效果如图 源码地址&#xff1a; 简易播放器: 基于Qt的简易播放器&#xff0c;底层采用VLC源码 - Gitee.com GitHub:GitHub - a-mo-xi-wei/easy-player: 基于Qt的调用VLC的API的简易播放器