当前位置: 首页 > news >正文

[Linux]在Ubuntu中如何正确安装python

一、在Ubuntu中python常见的安装方式

        在Ubuntu中我们常用的python安装方式有使用包管理工具安装或者使用源码安装,下面我们来讲解一下这两种安装方式的优缺点。首先是使用包管理工具安装,我们可以直接使用“apt install python3.9”来安装一个我们想要的版本的python,这种安装方式就非常的简单,对于新手非常友好,但是缺点也很明显,这种安装方式不能指定安装路径,在安装时环境变量也被一并配置好了,我们自定义的成分太少了,而且使用这种方式安装多个python后可能会造成环境冲突。然后我们来介绍一下使用源码进行安装的安装方式,这种安装方式就相对复杂一些,但是给用户的自定义成分也很高,我们可以自己选择安装路径,自行添加环境变量。在卸载时,我们直接将它安装的目录整个删掉即可,也算是一种比较简单的卸载方式了。这篇文章我们会主要讲解如何使用源码进行安装。下面,就让我们开始吧!

二、python的源码下载

        同样的,我们需要去python的官网下载源码,由于本次教程已经不面向纯小白了,所以很多细节可能会被我省略。我们打开python的官网:

如果你没有找到python的官网,可以点击下方的链接进入:

python官网:Welcome to Python.org

进入python的官网以后。我们点击“Downloads”进入python的下载页面。

进入下载界面以后,往下滑找到一个自己想安装的python版本。

点击“Download”进入下载详情页。往下滑,将源码下载下来:

我这里选择的是python3.10.14,后面也都会用这个版本进行演示。

我们这里如果你的Ubuntu是图形化的可以直接在浏览器中下载,如果是无图形化的可能就要使用wget命令来下载了。下面我们演示无图形化的情况,输入下面的命令:

 wget https://www.python.org/ftp/python/3.10.14/Python-3.10.14.tgz

不同版本的python相关的指令也不同。

下载好以后如图:

可以使用“ls”命令查看文件:

我们使用下面的命令来解压文件:

tar -xvf ./Python-3.10.14.tgz 

解压以后得到以下文件夹:

使用下面的命令进入源码文件夹:

cd Python-3.10.14

进入以后可以看到以下文件:

至此,我们的源码已经准备完成,下面就可以开始编译安装了。

三、python的安装

        我们使用源码安装python也可以选择指定安装路径和不指定安装路径两种,指定安装路径这个操作要在初始化的时候就要完成。后面,两种情况我都会演示。

        在不管是安装python时指定安装路径还是不指定安装路径它们都会有一个过程:“编译”,在编译时需要一些必要的依赖库,如果不安装这些库,在编译时就可能会报错,下面,我们就来安装编译时必要的库。

输入下面的命令更新apt的包列表,这样可以让我们安装的包处于一个比较新的版本。

sudo apt update

在更新完包列表以后,我们使用下面的命令来安装编译时必要的包。

sudo apt install -y build-essential libssl-dev zlib1g-dev libncurses5-dev libncursesw5-dev libreadline-dev libsqlite3-dev libgdbm-dev libdb5.3-dev libbz2-dev libexpat1-dev liblzma-dev tk-dev libffi-dev

我们可以看到,这里要安装的包非常的多,安装的速度可能会受网络环境的影响。有时候也可能因为网络问题直接安装失败,如果你遇到了这种情况,可以考虑更换网路环境或者使用一些正向代理手段。你也可以考虑一个一个包的安装,这样可以让你看到安装到哪一个包出了问题。发现不能安装的包以后,可以尝试手动安装。

在你安装好上面的包以后,就可以进入下一步了。

1.不指定安装路径安装

        我们首先进入刚才下载的源码目录,执行下面的命令:

./configure

这是我们源码目录下的一个预处理文件,用来对我们即将编译的代码进行预处理。也可以通过传入参数的方式来自定义一些功能,比如指定安装路径或者启动优化等。

执行完成以后,如图所示:

在执行完成以后,我们可以观察到,在我们的源代码目录下生成了一个“Makefile”文件,这个文件

是用于指导make如何编译代码的一个脚本文件。在make命令执行以后,它会首先去寻找当前目录的“Makefile”文件。

我们可以打开这个“Makefile”文件看一下。

使用下面的命令可以打开“Makefile”文件。

nano Makefile

我们可以“Makefile”文件中找到许多编译的规则,例如使用的编译器或者是使用的shell脚本路径再或者是安装的路径以及安装后各文件的路径。我们下面主要看安装以后各文件的路径。我们可以通过搜索找到“prefix”:

我们可以看到“prefix”变量的值是“/usr/local”这就表示,它会将python安装到这个路径下,然后我们可以看到“exec_prefix”变量的值是等于“prefix”的值。所以这样我们就可以推断出,我们的可执行文件会被安装在“/usr/local/bin”下,库文件会被安装在“usr/local/lib”下,下面的我们都可以以此类推从而找出python安装的文件夹。我还是比较不推荐不指定路径安装的,因为它会将我们安装的文件每个地方都放一点,不利于管理,并且在卸载时,我们还要去查看“Makefile”文件从而找出python都被安装到了哪个文件夹,需要我们一一去删除。当然,现在你不想使用不指定安装路径的安装方式还来得及,请将整个源码文件夹直接删除并且重新解压,解压后去到下面的指定安装路径的安装方式。

如果你觉得这样的安装方式你还能接受,那我们就继续吧。

在使用“./configure”进行了编译前的预处理以后,我们就可以使用下面的命令开始编译源代码了:

sudo make

如果你被提示“make”找不到之类的,那就可以考虑看看我上面让安装的编译所需的包有没有被正常安装。请一个一个进行检查。

如果你执行了编译指令以后,编译到一半。提示你找不到“xxx.h”文件,也是依赖包的问题。还是请检查安装的依赖包,当你检查完所有所需的包都齐全但程序仍然提示你缺少“xxx”包或者缺少“xxx.h”文件,这很有可能是由于python的新版本导致编译python所需的包与以往不同了。虽然这是极少数情况,但是如果你遇到了,可以根据报错去搜索“xxx”包的安装方法。

在make编译以后,你就可以使用下面的命令来安装编译好的文件了:

sudo make install

这里一定要加“sudo”不然会提示权限问题。执行完这条命令以后,没有报错就表示安装已经成功了,我们可以去到刚才看到的“Makefile”指出的目录下查看文件。在安装完成以后,可以跟着我们下面第四点的教程为这个python添加环境变量。

这个不指定安装路径的方法我在各个方面都讲得很简便,是因为我从一开始就强调了我并不推荐大家特别是小白使用这种方法。如果你并没有使用这种方法安装,我仍然推荐你看下面的指定安装路径的教程。

2.指定安装路径安装

        下面我将为大家介绍指定路径安装python的方法,这是我比较推荐的方法,它可以把python安装到一个文件夹中,方便我们管理和卸载。那么,话不多说,让我们开始吧!

        我们首先要做的还是先进入我们python的源代码目录:

我们看到源代码目录下的“configure”文件,这是我们编译前的预处理文件,它用于在编译之前对即将编译的代码进行预处理。我们可以通过修改传入这个配置文件的参数来实现一些自定义选项。下面我们就来运行这个预处理文件,并且修改其中的参数来实现指定路径安装,我们可以执行下面的指令:

./configure --prefix=/home/chulingxiao/python3.10.14

这里我们修改了文件的prefix参数,从而实现了修改路径,修改为了“/home/chulingxiao/python3.10.14”目录下。我们按下回车执行命令。如图所示,我们编译前的预处理就已经处理好了。

在执行了上面的命令以后,我们可以发现,我们的源代码目录下生成了一个“Makefile”文件。这个文件是用于指导“make”编译的一个文件,其中包含了使用的编译器以及shell的脚本路径和编译后的安装路径。我们可以打开这个文件看一下。使用下面的命令来打开文件。

nano Makefile

我们可以看到这儿的“prefix”变量中存放的就是我们刚才指定的路径,并且可以推导出后面的“bin”文件夹,“lib”文件夹等都会存放在我们指定的目录下。

在编译前的预处理已经完成以后我们就可以进行正式的编译了。我们可以在源代码目录下输入下面的命令来进行编译:

sudo make

这里一定要加上“sudo”不然可能会被提示权限问题。如果你被提示make命令找不到,请回去检查我一开始就让安装的编译所需的依赖包有没有被正常安装。如果在编译的过程中被提示“xxx”包未安装或者“xxx.h”头文件没有找到,同样的先去检查包是不是已经完全安装了,如果已经安装了我上面所有的包仍然提示有包或者.h文件未找到,那么就需要你自行的去安装一下这些不存在的包了。因为可能会因为python版本的不同,在编译时所依赖的包也不相同,尽管这样的可能性很低,但如果你遇到了还请自行搜索怎么安装这个缺失的包。

在输入命令以后,会经过一段时间,这段时间并不确定,根据自己的硬件和其它因素来决定。

如果你在编译的过程中没有看到红色的错误,并且收到和下图差不多的提示,那么就表示编译是成功的。

在编译成功以后,我们执行安装指令,使用安装指令来安装我们编译好的文件:

sudo make install

这条命令的前面也要加上“sudo”不然也可能提示权限类错误。

看到下面的提示,就表示我们编译好的二进制文件已经成功安装了,但是出现了两条警告,一条是我们没有将这个路径添加到环境变量,另一个警告是不推荐我们使用root的身份去执行pip。都是不重要的警告。

我们现在去到安装的目录验证一下安装的python是否可用。可执行文件在我们安装的目录下的“bin”目录下,我们使用下面的命令进行验证:

cd /home/chulingxiao/python3.10.14/bin/
./python3.10
print('hello')

我们可以看到我们的python具有输出,说明我们的安装是成功的。

四、将python添加到环境变量中

        当我们输入一个命令以后,系统会优先从当前路径寻找,然后再去用户变量中寻找,最后会去系统变量中寻找,如果都没找到就会提示没有这个命令或者这个命令没有找到。所以我们在这里配置环境变量我们要将python配置到用户变量中。

我们使用下面的命令打开用户环境变量的配置文件:

nano ~/.bashrc

我们可以去到配置文件的下方,在配置文件中加入一行:

export PATH="/home/chulingxiao/python3.10.14/bin:$PATH"

大家照着复制就行,把这里面的路径替换为自己的python安装路径,不要忘了语句最后的“:$PATH”

在添加完这一行后保存并且退出文件:

我们使用下面的命令来更新环境变量的配置文件:

source ~/.bashrc

更新完环境变量以后,我们在系统中的任何路径下输入“python3.10”就都能找到我们安装的python了。

至此,我们python的环境变量已经配置完成。如果你在配置完环境变量以后仍然被提示找不到命令,那首先去检查环境变量的配置文件,检查配置文件中的路径是否写对,语句是否有缺失,确定配置文件是正确的以后还是不行的话就去查看是否使用命令更新了配置文件。

五、结语

        因为这次的教程并不是面向小白的,所以中间我省略了许多细节,但是大致的操作步骤是不会变的,最容易出现错误的地方就在编译的时候,这里需要大家仔细检查所需的包是不是都已经安装完成了。大家在添加环境变量时也要注意不要输错了或者少输一些东西。那我们今天的教程就到此结束了,感谢大家的阅读!

相关文章:

[Linux]在Ubuntu中如何正确安装python

一、在Ubuntu中python常见的安装方式 在Ubuntu中我们常用的python安装方式有使用包管理工具安装或者使用源码安装,下面我们来讲解一下这两种安装方式的优缺点。首先是使用包管理工具安装,我们可以直接使用“apt install python3.9”来安装一个我们想要的…...

[Vue3 + TS + Vite]文件选择器-组件

文件选择器组件代码 <script setup lang"ts"> import { ref, onMounted, defineProps, defineEmits, computed, toRaw } from vue;// 定义props interface Props {buttonTextUnactive?: string;buttonTextActive?: string;onFatherClick?: boolean; }// 定…...

Chrome书签搜索插件

效果展示 这是一个chroma插件&#xff0c;可以按住 ctrl/command B 进行搜索您的书签&#xff0c;并且点击打开您的书签。支持上下切换回车打开新页面。 扩展下载地址 bookmark-search 欢迎有任何问题给我提 issues...

MATLAB算法实战应用案例精讲-【人工智能】联邦学习(二)(附python代码实现)

目录 前言 几个高频面试题目 面向隐私保护的机器学习(PPML)和安全机器学习(Secure ML)的区别: 联邦学习、安全计算是什么关系? 联邦学习有哪些类型?如何区分横向联邦学习和纵向联邦学习? 什么是IID?什么是Non-iid? 联邦学习训练后的模型是一个公共的模型,而…...

在 C++ 中实现一个简单的图形用户界面(GUI)应用

在 C 中实现一个简单的图形用户界面&#xff08;GUI&#xff09;应用 图形用户界面&#xff08;GUI&#xff09;应用程序是现代软件开发中不可或缺的一部分。它们为用户提供了直观的交互方式&#xff0c;使得操作更加简单和高效。本文将介绍如何在 C 中实现一个简单的 GUI 应用…...

如何编写一个CMakeLists.txt文件(由简到难,较详细)

在Linux系统下&#xff0c;经常使用CMakeLists.txt文件来链接、编译C工程&#xff0c;大部分人clone的代码里都是有CMakeLists.txt文件的&#xff0c;只需要cmake .. 和make就完事了&#xff0c;但在工作中&#xff0c;你必须要有从无到有编写CMakeLists.txt文件的能力。 一、…...

数据结构----链表

一丶概念 链表又称单链表、链式存储结构&#xff0c;用于存储逻辑关系为“一对一”的数据。 和顺序表不同同&#xff0c;使用链表存储数据&#xff0c;不强制要求数据在内存中集中存储&#xff0c;各个元素可以分散存储在内存中。 二丶特点 特点&#xff1a;内存不连续…...

【Qt】内置对话框

一.Qt内置对话框 Qt 提供了多种可复⽤的对话框类型&#xff0c;即 Qt 标准对话框。Qt标准对话框全部继承于QDialog类。常⽤标准对话框如下&#xff1a; 二.内置对话框分类 1.消息对话框 QMessageBox 1.1 概念 消息对话框是应⽤程序中最常⽤的界⾯元素。消息对话框主要⽤于为…...

excel常规操作

一、去重 IF(COUNTIF($D$1:D2,D2)>1,"",C2) —— D是去重的列 二、不同列匹配 VLOOKUP(A1,E:F,2,0) vlookup(查找值, 查找区域, 返回查找区域的第几列数据, 精确查找输入参数"0"or"false" 或 模糊查找输入参数"1"or"true…...

uniapp webview子页面向父页面发送数据和触发事件,重点在第3条!!!

1、众所周知H5中iframe可以用过postmessage进行&#xff0c;从H5子页面向H5父页面进行通信。方法如下&#xff1a; // 子页面 window.parent.postMessage({ data: 你的消息 }, *);// 父页面 <iframe src"xxxxxxxxxxx"></iframe> window.addEventListene…...

【STM32实物】基于STM32+ESP32+手机APP设计的智能宠物喂食系统实物源码原理图PCB设计文档演示视频——(文末工程资料下载)

基于STM32+ESP32+手机APP设计的智能宠物喂食系统 演示视频 基于STM32+ESP32+手机APP设计的智能宠物喂食系统 摘 要 近年来,宠物在人们生活中越来越不可或缺,给人们带来的陪伴和快乐。然而,由于种种原因,主人不能时刻照顾宠物的饮食,所以宠物喂食装置变得尤为重要。传…...

EMC学习笔记5——辐射骚扰发射

辐射骚扰发射是基本的实验项目&#xff0c;目的是检验设备在工作时有没有产生意外的过强电磁辐射。 例如发电机&#xff0c;在工作时会产生意外的电磁波辐射&#xff0c;因为电子设备中隐藏了一些天线&#xff0c;这些隐藏的天线在辐射电磁波。 一、两种基本的天线结构 如前面…...

深入理解浏览器解析机制和XSS向量编码

基础部分 1.<a href"%6a%61%76%61%73%63%72%69%70%74:%61%6c%65%72%74%28%31%29">aaa</a> <a>标签可以识别&#xff0c;但是解析不了&#xff0c; 是在协议的编码顺序上&#xff0c;先认协议 URL 编码 "javascript:alert(1)" 2.<a …...

winform 大头针实现方法——把窗口钉在最上层

平时我们再使用成熟的软件的时候&#xff0c;会发现有个大头针的功能挺不错的。就是点一下大头针&#xff0c;窗口就会钉住&#xff0c;一直保持在最上面一层&#xff0c;这样可以一边设置参数&#xff0c;一边观察这个窗口里面的变化&#xff0c;比较方便。下面我就来简单实现…...

中间件|day1.Redis

Redis 定义 Redis 是一个开源&#xff08;BSD许可&#xff09;的&#xff0c;内存中的数据结构存储系统&#xff0c;它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构&#xff0c;如 字符串&#xff08;strings&#xff09;&#xff0c; 散列&#xff08;hash…...

PMP到底有什么用?

PMP 就是项目管理证书&#xff0c;全称是项目管理专业人士资格认证&#xff0c;对于一个在项目管理岗位混迹五年的老油条来说&#xff0c;PMP 证书是敲开项目管理岗位的第一块砖&#xff0c;每年考 PMP 的人都很多&#xff0c;要是 PMP 证书没有价值&#xff0c;还会有那么多人…...

apache huidi 时间旅行Time Travel)机制

Apache Hudi(Hadoop Upserts Deletes and Incrementals)是一个数据管理框架,它帮助你高效地管理存储在分布式存储系统(如HDFS或云存储)上的大型数据集。其一个关键特性是“时间旅行”,这允许你在特定时间点查询数据的历史版本。 什么是Apache Hudi中的时间旅行? Apach…...

Python 数据可视化,怎么选出合适数据的图表

数据可视化最佳实践 1. 引言&#xff1a;为什么数据可视化最佳实践很重要 数据可视化是数据分析和决策过程中不可或缺的一部分。通过有效的可视化&#xff0c;复杂的数据可以转化为易于理解的信息&#xff0c;从而帮助观众快速做出正确的判断。然而&#xff0c;糟糕的可视化可…...

c# 元组

文章目录 元组的定义元组的使用示例使用场景创建一个列表 在 C# 中&#xff0c;元组&#xff08;Tuple&#xff09;是一种用于存储多个值的数据结构&#xff0c;它可以方便地将不同类型的多个值打包在一起。元组在 C# 7.0 及更高版本中得到了增强&#xff0c;允许更方便地创建和…...

自定义注解

目录 使用注解定义分布式锁 Aop例子 retention 表示在什么时候可以用&#xff0c;runtime表示在运行期可以用 target表示可以用在哪些上面 inherited表示可以被继承 切点和切面类 重点是 pjp.proceed(args) 这个就是执行目标方法&#xff0c;下面的这一段没啥意思 也可…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 &#xff08;一&#xff09;概念解析 TRS&#xff08;Total Return Swap&#xff09;收益互换是一种金融衍生工具&#xff0c;指交易双方约定在未来一定期限内&#xff0c;基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

算法笔记2

1.字符串拼接最好用StringBuilder&#xff0c;不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...

安卓基础(Java 和 Gradle 版本)

1. 设置项目的 JDK 版本 方法1&#xff1a;通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分&#xff0c;设置 Gradle JDK 方法2&#xff1a;通过 Settings File → Settings... (或 CtrlAltS)…...