在CentOS 7.5上用离线压缩包安装Python-3.9.10的过程记录

news2024/11/15 20:04:32

项目的需要,需要在CentOS 7.5上去部署一个Python 3.9.10的安装环境。

值得注意的是在CentOS 7.5系统中,默认安装了 Python 2.7.x。
Python 2.7.x 是许多系统工具和应用程序所依赖的版本,因此它被包括在 CentOS 7.5 发行版中。如果在 CentOS 7.5 系统上运行 python 命令,它将使用默认的 Python 2.7.x 解释器。

我们可以测试一下是不是默认安装了Python 2.7.x。
用下面这条命令去测试:

python --version

在这里插入图片描述
从上面的运行结果来看,CentOS 7.5是默认安装了Python 2.7.5的。

接下来的问题是,显然,在CentOS 7.5中,一些程序或软件,包括用户安装的,是需要依赖Python 2.7.x,所以对于Python 2.7.x,我们并不能将它卸载了事。

那我们怎样保证自己写的Python代码能通过Python 3的解释器来执行,而不通过.Python 2.7.x的解释器来执行呢?
常见的方法有两种:
第1种:在命令行中使用 python3 命令来运行 Python 3.x 代码。例如,假设您的 Python 3.x 代码保存在 test.py 文件中,您可以使用以下命令来运行它:

python3 test.py

第2种:在 Python 3.x 代码的第一行添加以下代码,这将确保代码在 Python 3.x 中运行:

# !/usr/bin/env python3

这里详细解释一下上面这句代码的含义:

#!/usr/bin/env python3是一个特殊的注释,也称为 Shebang 或 Hashbang。它的作用是告诉系统这个脚本应该使用哪个解释器来运行。

当在 Linux 或类 Unix 系统中运行一个脚本时,内核会查看脚本的第一行,如果它以 #! 开头,那么内核会将其余部分解释为解释器的路径,然后将脚本文件作为解释器的参数来运行脚本。

在 #!/usr/bin/env python3 中,#! 表示这是一个 Shebang 注释。/usr/bin/env 是一个可执行文件,它可以在系统的 PATH 环境变量中搜索可执行文件并执行它。python3 是要使用的解释器的名称。
注意:
/usr/bin/env 是一个可执行文件,env这个可执行文件的作用是:在 PATH 环境变量中搜索与该命令对应的可执行文件,并使用找到的第一个可执行文件来执行该命令。
当 #!/usr/bin/env python3 出现在脚本文件的第一行时,内核会解析这行代码,并使用 env 可执行文件来查找与 python3 命令对应的可执行文件的位置。由于 env 是一个可执行文件,所以它可以搜索 PATH 环境变量中的所有目录,直到找到名为 python3 的可执行文件。然后,env 将控制权传递给 python3 可执行文件,使其运行 Python 3.x 解释器,并开始解释剩余的脚本代码。
使用 env 来寻找可执行文件的好处是,可以避免在脚本中硬编码可执行文件的路径,而是通过 PATH 环境变量来查找可执行文件,这样可以增加脚本的可移植性。如果您在其他系统上运行具有相同 Shebang 行的脚本,env 将使用该系统上的正确版本的 Python 解释器来运行脚本,即使在不同系统上,Python 解释器的安装路径也可能不同。

我们可以根据自己的实际情况去选择上面两种方法。

接下来还有个问题,那就是对于我们编写的每一个Python代码,是不是都需要加上上面这句代码呢?
答案是:如果希望用Python3解释器运行,那就都加上吧。

通常我们还需要在每个Python代码文件的开头加上编码格式说明语句:

# -*- coding: utf-8 -*-

那么问题来了,这两句说明性语句的顺序应该是怎样的呢?

# -*- coding: utf-8 -*-

# !/usr/bin/env python3

还是:

# -*- coding: utf-8 -*-

# !/usr/bin/env python3

呢?

答案显示是应该把语句

# -*- coding: utf-8 -*-

放在第一行嘛,这是因为编码格式说明语句应该放在任何其他内容之前。Python 解释器在读取 Python 代码文件时会查找编码格式说明语句,以确定代码文件中使用的字符编码,然后才会开始解释文件的其他部分。

这两个前置性问题搞清楚后,接下来我们就可以在CentOS 7.5安装Python 3了。

在安装Python 3前,一般会用命令

sudo yum update

作用:更新您系统中已安装的软件包到最新版本。

具体来说,sudo yum update 命令会执行以下操作:

检查您系统上已安装的软件包版本和可用的最新软件包版本之间的差异。
下载可用的更新并安装它们。
询问您是否确认要安装这些更新,如果您同意,则会安装它们。
在安装过程中,如果需要,可能会要求您提供一些额外的信息。
更新软件包后,yum 命令会重新启动与这些软件包相关的服务和应用程序,以确保新版本的软件包正确地运行。
通过定期更新软件包,您可以获得最新的功能和安全修复,以提高系统的可靠性和安全性。

提问:为什么装Python 3前要去更新系统中别的已安装的软件包到最新?
答:安装Python 3之前更新已安装的软件包是一种好的做法,因为许多软件包在运行时需要一些特定版本的库和依赖项。更新系统上的软件包可以确保您的系统中安装的软件包与Python 3兼容,并可以避免可能出现的不兼容性问题。
此外,更新软件包也可以提高系统的安全性和性能。新版本的软件包通常会修复安全漏洞和其他错误,并提供了更好的性能和稳定性。如果您不更新软件包,则可能会遇到性能下降或安全漏洞等问题。
因此,在安装Python 3之前更新已安装的软件包是非常推荐的,可以确保您的系统安全、稳定和兼容。

提问:装Python 3前不更新系统中别的已安装的软件包到最新可不可以?
答:理论上,在安装Python 3之前不更新已安装的软件包也可以。但是,这可能会导致一些不兼容性问题,可能会影响您系统上的其他软件包的正常运行。

如果您不更新软件包,则可能会遇到某些软件包版本之间的依赖关系冲突,从而导致安装Python 3失败。此外,一些旧版本的软件包可能包含已知的安全漏洞,这可能会导致系统的安全性受到威胁。

因此,建议在安装Python 3之前更新系统中已安装的软件包,以确保系统的兼容性、安全性和稳定性。如果您因为某些原因无法更新软件包,则建议在安装Python 3之前仔细检查系统和软件包的兼容性,并确保您已经安装了所有必要的依赖项。

执行语句:

sudo yum update

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上图局部放大的截图如下:
在这里插入图片描述

接下来去Python官网下载Python-3.9.10的离线压缩包。
Python官网下载Python-3.9.10的离线压缩包的URL链接如下:
https://www.python.org/ftp/python/3.9.10/

下载文件名为:Python-3.9.10.tgz,这个是用来安装在Linux系统上的哈。

下载好之后利用宝塔面板上传到目录 /opt/myapp/下:
在这里插入图片描述

提问:为什么是目录 /opt/myapp/下呢?
在CentOS系统中,一般把自己上传的离线安装包放到 /opt 目录下比较专业和规范。

/opt 目录是专门用来存放第三方软件和应用程序的,默认情况下只有 root 用户有写入权限。将离线安装包放到 /opt 目录下可以方便管理和维护,同时也遵循了Linux系统的文件系统层次结构(Filesystem Hierarchy Standard, FHS)标准。

在 /opt 目录下,可以创建一个与应用程序名称相关的子目录,再将离线安装包解压到该目录下。例如,如果你要安装的应用程序名为 myapp,那么可以在 /opt 目录下创建一个名为 myapp 的子目录,并将离线安装包解压到该目录中。

总之,将离线安装包放到 /opt 目录下是一个比较常见的做法,也是符合标准的做法。

然后就可以按上面的步骤进行安装了。
1 进入到 Python-3.9.10.tgz 所在目录。

cd /opt/myapp/

在这里插入图片描述

2 解压 Python-3.9.10.tgz 文件。

tar -xzvf Python-3.9.10.tgz

3 进入到解压后的 Python-3.9.10 目录:

cd Python-3.9.10

在这里插入图片描述

4 配置安装选项:

./configure --prefix=/usr/local/python3.9

这里指定了 Python 的安装路径为 /usr/local/python3.9,也可以根据需要自行修改。
这条语句通过执行带参数的 ./configure 脚本,来实现配置 Python 的安装路径。具体的参数就是“prefix=/usr/local/python3.9”
在这里插入图片描述

5 编译并安装 Python:

make && make install

6 验证 Python 是否安装成功:

/usr/local/python3.9/bin/python3 -V

7 这里使用了刚刚安装的 Python-3.9.10 的路径,输出应该为:

Python 3.9.10

在这里插入图片描述
8-为Python创建软链接(类似于Windows中配置环境变量),以便在命令行中直接使用python3命令:

sudo ln -s /usr/local/python3.9/bin/python3 /usr/bin/python3

通过这个命令,可以实现在命令行中直接使用python3命令调用Python 3.9.10。
在这里插入图片描述
运行完上面这个软链接创建命令后,在目录/usr/bin/中会出现下面这个软链接:
在这里插入图片描述
因为/usr/bin/路径是系统环境变量PATH中默认存在的环境变量路径,所以完成这个步骤后,可以在命令行中输入python3 -V来验证Python是否安装成功,以及Python的版本号是否为3.9.10。
在这里插入图片描述
题外话:如果软链接的路径搞错了,想删除掉,可以用下面这条命令实现:

sudo rm /usr/bin/python3

通过以上软链接的建立,如果我们在Python代码中添加了下面这句代码:

#!/usr/bin/env python3

那么Python代码在执行时就会使用Python3解释器来执行了,而不是Python2解释器了.

通过以上过程, 就安装好了Python-3.9.10,接下来就是用一个实际例子测试了。

我们用下面这段代码打印出当前使用的Python解释器的版本号。

# -*- coding: utf-8 -*-
# !/usr/bin/env python3

import sys

print("The current Python interpreter version number is:\n", sys.version_info)

我们把上面这段代码保存到文件P-0004.py中,并上传到CentOS 7.5系统的/opt/python_scripts下,

首先确保文件P-0004.py的运行权限打开,
关于权限的相关知识,可以参考博文:
https://blog.csdn.net/wenhao_ir/article/details/130151125
在这里插入图片描述

然后执行下面这条语句:

python3 /opt/python_scripts/P-0004.py

运行结果如下:
在这里插入图片描述
从上面的结果我们可以看出,我们成功运行了 P-0004.py 并且得到了Python解释器的版本号。

至此,我们就成功实现“在CentOS 7.5上用离线压缩包安装Python-3.9.10”,并用测试代码进行了测试。

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

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

相关文章

太全面了,数据治理8大核心模块建设参考

数据治理是一个去中心化、多元参与的系统工程。一个全面且明确的数据治理体系,可以帮助组织构建生态式、协同化治理路径,最大化地提升整体数据质量,实现数据战略,激活新型生产力。 本文以元数据、数据标准、主数据、数据交换、数…

Mybatis-Plus批量添加或修改数据的三种方式

SpringBoot批量添加或修改数据的三种方式 方式一.Mybatis-plus 提供的 saveOrUpdateBatch 提供的方法 是遍历每一个元素,判断主键是否存在,如果存在则做更新,不存在添加 方式二.分组数据再批量添加或修改 先获取表中所有的主键 &#xff0…

6D姿态检测

3D相机—结构光相机 结构光,英文叫做 Structured light,其原理是基本原理是,通过近红外激光器,将具有一定结构特征的光线投射到被拍摄物体上,再由专门的红外摄像头进行采集。这种具备一定结构的光线,会因被…

如何在TikTok视频描述中提高用户参与度

鑫优尚电子商务:TikTok视频描述(包括话题标签)有150个字符的限制,因此卖家需要合理撰写出有趣且有实际意义的视频描述。可尝试将描述保持在140个字符以内,将最重要的信息放在前面,并通过多次修改文案以排除…

蚂蚁4.11笔试

文章目录前言一、红蓝格子填字母【蚂蚁4.11笔试第三题】解法一:二分解法解法二:模拟二、桌上弹球游戏【蚂蚁4.11笔试第二题】每日一题day82:困于环中的机器人(力扣1041)前言 1、红蓝格子填字母 2、桌上弹球游戏 3、困…

12 个好用且不花钱的网络监控工具

导读要让一个多级机构运行良好而且平稳的话,一个非常艰巨重大的任务就是做好网络管理。每个机构都配备专门的人员,即网络分析师,来进行网络管理。他们 使用了 许多工具来监视网络的运行状况,并查看网络流量的上升和下降状况。他们…

机器学习 03 K-近邻算法

目录 一、K-近邻算法 1.1 K-近邻算法(KNN)概念 1.1.1 概念理解举例 1.2 KNN算法流程总结 1.3 K值的选择 1.3.1 举例说明 1.4 kd树 1.4.1 KD树原理 1.4.2 树的建立 1.5 最近领域的搜索 k近邻算法优缺点 二、距离度量 2.1 距离公式的基本性质 2.2 常见的距离 2.2.…

进程间通信之消息队列

消息队列一. 什么是消息队列二. 消息队列有关函数1.获取key - ftok2.创建消息队列 - msgget3.发送消息 - msgsnd4.接收消息 - msgrcv5.删除消息队列 - msgctl三. 实例注意:一. 什么是消息队列 消息队列独立于发送消息的进程和接收消息的进程,消息队列是消息的链表&…

【牛客刷题专栏】0x19:JZ18 删除链表的节点(C语言编程题)

前言 个人推荐在牛客网刷题(点击可以跳转),它登陆后会保存刷题记录进度,重新登录时写过的题目代码不会丢失。个人刷题练习系列专栏:个人CSDN牛客刷题专栏。 题目来自:牛客/题库 / 在线编程 / 剑指offer: 目录前言问题…

GPT-5年底上线?初创公司Runway CEO再爆料:OpenAI员工相信GPT-5有望成AGI

来源: 新智源 微信号:AI-era 最近,Runway CEO关于GPT-5的爆料,又被网友们翻了出来,讨论得热火朝天。不论AGI会在哪一年出现,显然,能见证这一天的人都是幸运的。 最近,又有网友翻出了关于GPT-5的…

初识Linux+Linux基本指令(一)

目录 一.😆计算机与操作系统😆 计算机与操作系统发展史简介: 计算机与操作系统的关系: 二.😄Linux操作系统😄 开源软件的代名词:Linux 非图形化界面的Liunx 三.😆Linux基本指令之文件管理篇😆 1.操…

Spring配置数据源

Spring配置数据源数据源的作用环境准备手动创建c3p0数据源封装抽取关键信息,手动创建c3p0数据源使用Spring容器配置数据源数据源的作用 数据源(连接池)是提高程序性能如出现的 事先实例化数据源,初始化部分连接资源 使用连接资源时从数据源中获取 使用完…

网络安全行业现在好混吗,工资水平怎么样?

前段时间看到有人私信:网络安全行业现在好混吗,工资水平怎么样?今天在这里做个回答,不知你所说的“好混吗”指的是什么? 薪资高,待遇好?不加班,活儿少?不受气&#xff0…

我的创作纪念日 - 2048

2048 ✌️ 今天是 2023 年 4 月 10 日,系统说我在 2017 年 08 月 31 日那天发布了第一篇博客(【算法】编写一个能将给定非负整数列表中的数字排列成最大数字的程序),距离当时已经有 2048 天了,2048 这个数字真的很能挑…

短期突击面试攻略,收offer如砍瓜切菜!!!

​​​​​现在的面试是什么样的? 面试官拿到简历后会先看下你的技术栈,他面试你的问题就来自这些技术栈 面试官都是看人下菜碟,每次面试问的问题都不一样,会根据你回答问题的情况来决定深入的程度,直到了解清楚你的…

△形网络和Y型网络的变换

△形网络和Y型网络的变换 △形网络也称三角形网络,Y也称星形网络 我们今天就来看下这两种网络是如何变换的。 看下面的电路 如何通过计算得出电流表的读数? 显然电路的串并联结构并不是那么纯粹,Ra Rb Rc构成了一个 △形网络,如下图所示。…

小学数学题升维思考,降维打击

目录一、背景二、题目三、过程1.形式转换2.个位数相加只能向前进一位嘛?3.十位数上要填写的内容?4.如何下意识的去做结构化?四、总结五、升华一、背景 公司的产品是做K12的教育平台,马老板也受感染研究起了小学数学题。一道二年级的题让我窥…

Java阶段一Day19

Java阶段一Day19 文章目录Java阶段一Day19对象流字符流WriterReader转换流缓冲字符流BufferedWriter与PrintWriterBufferedReader异常Throwable、Error、Exception异常处理机制throwthrowstry-catchfinally面试题教师总结新单词JAVA IO对象流对象输入流构造器方法例transient关…

求根号n下界

目录 求根号n 程序设计 程序分析 求根号n 【问题描述】设计一个计算的算法,n是任意正整数。 除了赋值和比较运算,该算法只能用到基本的四则运算操作。 【输入形式】输入一个正整数 【输出形式】输出答案 【样例输入】10 【样例输出】3 【样例说明】表示对n开平方后向…

Linux线程基础:控制和封装

本节重点: 1. 了解线程概念,理解线程与进程区别与联系。 2. 学会线程控制,线程创建,线程终止,线程等待。 3. 了解线程分离与线程安全概念。 Linux线程概念 在一个程序里的一个执行路线就叫做线程(threa…