記錄centos8 升級Python3.6到Python3.9以及可能遇到的問題

news2024/10/5 18:34:06

目录

    • 下载Python3.9.9
    • 可能出現的問題及解決方案
    • 安裝python3.9
    • 可能出現的問題及解決方案
    • 建立Python3和pip3的软鏈接:
    • 查看Python3和Pip3是否正确的被安装:
    • 将/usr/local/python3/bin加入PATH

Centos8-默认的Python、python2版本为2.7,python3版本為3.6,不符合项目的需求。现在升级到3.9

下载Python3.9.9

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

在这里插入图片描述

可能出現的問題及解決方案

注意這個需要在root權限下,不然會報權限不夠的錯誤,如下:

Resolving www.python.org (www.python.org)... 151.101.108.223, 2a04:4e42:8c::223
Connecting to www.python.org (www.python.org)|151.101.108.223|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 25787134 (25M) [application/octet-stream]
Python-3.9.9.tgz.1: Permission denied

Cannot write to ‘Python-3.9.9.tgz.1(Success).

在这里插入图片描述

切換root權限

su root 

在这里插入图片描述
默認是不顯示密碼的,打完回車就行了

安裝python3.9

解壓

tar zxvf Python-3.9.9.tgz	# 解壓

在Linux中紅色是壓縮文件;白色文件是一般性文件,如文本文件,配置文件,源码文件等。
在这里插入图片描述

蓝色代表目录
绿色代表可执行文件
红色表示压缩文件
浅蓝色表示链接文件
灰色表示其他文件
红色闪烁表示链接的文件有问题了
黄色表示设备文件。

3.7版本之后需要一个新的包libffi-devel(我沒安裝好像也不影響,暫時沒發現什麽問題)

yum install libffi-devel -y

进入python文件夹,生成编译脚本(指定安装目录)。如果這裏make的時候報錯往下面看解決方案

cd Python-3.9.9/	# 去到Python-3.9.9目錄
./configure --prefix=/usr/local/python3 --enable-optimizations	# 进入python文件夹,生成编译脚本(指定安装目录):
make # 编译
make install	# 安裝

编译:make
实际就是编译源代码,按照上一步生成makefile文件进行编译,并生成执行文件。
在 Linux环境下使用 GNU 的 make工具能够比较容易的构建一个属于你自己的工程,整个工程的编译只需要一个命令就可以完成编译、连接以至于最后的执行。不过这需要我们投入一些时间去完成一个或者多个称之为 Makefile 文件的编写。此文件正是 make 正常工作的基础。make 是一个命令工具,它解释 Makefile 中的指令(应该说是规则)。在 Makefile文件中描述了整个工程所有文件的编译顺序、编译规则。所以,首先我们要将所有要编译的文件信息写到makefile中,然后执行make,make就会按照makefile进行编译,这避免了程序在调试过程中频繁输入命令进行编译。但是makefile写起来比较复杂,规则很多。

可能出現的問題及解決方案

注意!!編譯(make)的時候可能會報以下錯誤

make build_all CFLAGS_NODIST=" -fprofile-use -fprofile-correction" LDFLAGS_NODIST=""
make[1]: Entering directory `/usr/local/src/Python-3.8.0'
./python -E -S -m sysconfig --generate-posix-vars ;\
if test $? -ne 0 ; then \
	echo "generate-posix-vars failed" ; \
	rm -f ./pybuilddir.txt ; \
	exit 1 ; \
fi
Could not import runpy module
Traceback (most recent call last):
  File "/usr/local/src/Python-3.8.0/Lib/runpy.py", line 15, in <module>
    import importlib.util
  File "/usr/local/src/Python-3.8.0/Lib/importlib/util.py", line 14, in <module>
    from contextlib import contextmanager
  File "/usr/local/src/Python-3.8.0/Lib/contextlib.py", line 4, in <module>
    import _collections_abc
SystemError: <built-in function compile> returned NULL without setting an error
generate-posix-vars failed
make[1]: *** [pybuilddir.txt] Error 1
make[1]: Leaving directory `/usr/local/src/Python-3.8.0'
make: *** [profile-opt] Error 2

导致原因:

  • 在低版本的gcc版本中带有 --enable-optimizations 参数时会出现上面问题
  • gcc 8.1.0修复此问题

解决方法如下

  • 升级gcc至8.1.0【不推荐】
  • ./configure参数中去掉 --enable-optimizations

即上一個步驟執行的命令修改為:

cd Python-3.9.9/
./configure --prefix=/usr/local/python3
make
make install

安裝成功可以檢查一下python3.9編譯器

cd /usr/local/python3/bin

在这里插入图片描述

建立Python3和pip3的软鏈接:

ln -s /usr/local/python3/bin/python3 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3

注意!!因爲我們不是安裝而是升級,原來其實是有一個python3但是是指向python3.6的,我們需要把原來的python刪掉先不然會報錯,如下

ln: failed to create symbolic link ‘/usr/bin/python3’: File exists

在这里插入图片描述
即上一個步驟執行的命令修改為:

# 删除原先的Python3和pip3
rm -rf /usr/bin/python3
ln -s /usr/local/python3/bin/python3 /usr/bin/python3
rm -rf /usr/bin/pip3
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3

查看Python3和Pip3是否正确的被安装:

python3 --version 
pip3 --version

在这里插入图片描述
或者

# 注意是大寫V
python3 -V	
pip3 -V

在这里插入图片描述

到此就完成升級版本了,可能運行會有個警告說沒有添加環境變量(PATH),但是我記得不影響使用

将/usr/local/python3/bin加入PATH

# 一定要在root權限下面
vim /etc/profile	
# 不在root權限執行這一條
sudo vim /etc/profile	

按“I”,然后贴上下面内容:

  export PYTHON_HOME=/usr/local/python3
  export PATH=${PYTHON_HOME}/bin:$PATH

按ESC,输入 :wq (注意有個冒號)回车退出。

修改完执行行下面的命令,让配置生效:

source /etc/profile

因爲不配環境變量也能python -V測試所以這個也不知道怎麽證明配好了,不過之前運行pip命令下載東西要是有警告沒有配PATH應該這樣配置后就不會有警告了

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

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

相关文章

迭代器深入理解

目录 vector 例子引入 迭代器的价值 通过vector和list 迭代器的差异再次深入理解 vector 例子引入 在学习vector底层erase&#xff0c;碰到迭代器失效的时候我有个疑惑&#xff0c;为什么sgi 版&#xff08;Linux g使用的&#xff09;库里实现的迭代器对于有些迭代器失效情…

threejs教程(一)

插件安装 npm i three项目引入 这里我随便找的VUE项目练习的 import * as THREE from "three";大致介绍一下threejs的逻辑 一般我们用它是来搭建三维模型的,搭建三维模型就需要的三个要素 场景(scene) 渲染器(renderer) 和相机(camera) 场景简单理解就是唱戏的戏台…

【C++升级之路】第六篇:模板初阶(函数模板类模板)

&#x1f31f;hello&#xff0c;各位读者大大们你们好呀&#x1f31f; &#x1f36d;&#x1f36d;系列专栏&#xff1a;【C学习与应用】 ✒️✒️本篇内容&#xff1a;泛型编程的概念&#xff0c;函数模板的概念、格式、原理和基础使用方法&#xff0c;类模板的格式和基础使用…

Java一维数组的定义、赋值和初始化

当数组中每个元素都只带有一个下标时&#xff0c;这种数组就是“一维数组”。一维数组&#xff08;one-dimensional array&#xff09;实质上是一组相同类型数据的线性集合&#xff0c;是数组中最简单的一种数组。 数组是引用数据类型&#xff0c;引用数据类型在使用之前一定要…

Linux操作系统--文本编辑器(保姆级教程)

文本编辑器 Linux是一种文本驱动的操作系统。用户在使用Linux过程中经常需要编辑文本&#xff0c;比如编写脚本文件来执行几条命令行&#xff0c;写电子邮件&#xff0c;创建C语言源程学等&#xff0c;因此&#xff0c;必须熟悉至少一种文本编辑器以便高效地输入和修改文本文件…

Spring循环依赖详解

概述 我们在日常的技术交流中经常会提到Spring循环依赖&#xff0c;听起来挺高大尚的&#xff0c;那Spring到底是如何实现的呢&#xff1f;下面我们就来一一揭秘。 什么是循环依赖 如上图所示&#xff0c;A对象中包含B对象的引用&#xff0c;同时B对象中包含A对象的引用&…

微信小程序自定义tabbar栏【中间突出样式】

文章目录前言一、自定义tabbar栏 配置二、添加自定义tabbar栏组件添加组件代码创建全局字段在组件中保存重要字段三、效果展示总结前言 昨天主管突然给我说微信小程序默认的 tabBar 不美观&#xff0c;让我改成中间突出的那种样式。纵然我心里面有千般不情愿&#xff0c;但还是…

python实现算法与数据结构基础-链表、栈、队列、排序算法、二分查找、二叉树

目录1、算法的概念1.1 举例&#xff1a;1.2 算法的五大特性&#xff1a;1.3 时间复杂度1.4 空间复杂度2、数据结构2.1 内存的存储结构2.2 数据结构的分类2.3 顺序表存储方式3、链表3.1链表实现3.2链表的方法3.3链表增加节点3.4链表删除节点3.5链表总结4、栈4.1 栈的介绍4.2 栈的…

负载均衡SLB和LVS的简单介绍

负载均衡 SLB 阿里云SLB(Server Load Balancing&#xff0c;服务器负载均衡)&#xff1a;是阿里云结合自身弹性计算平台的特点以及强大的技术优势&#xff0c;提供的一套软件负载均衡解决方案&#xff0c;以更好的满足弹性计算平台负载均衡的需求。 什么情况下使用SLB? 简单…

2022尚硅谷SSM框架跟学(四)Spring基础一

2022尚硅谷SSM框架跟学.四 Spring基础一Spring1.Spring简介1.1、Spring概述1.2Spring家族1.3Spring Framework1.3.1Spring Framework特性1.3.2Spring Framework五大功能模块2.IOC2.1.IOC容器2.1.1IOC思想(1).获取资源的传统方式(2).反转控制方式获取资源(3).DI2.1.2、IOC容器在…

(02)Cartographer源码无死角解析-(48) 2D点云扫描匹配→扫描匹配基本原理讲解,代码总体框架梳理

讲解关于slam一系列文章汇总链接:史上最全slam从零开始&#xff0c;针对于本栏目讲解(02)Cartographer源码无死角解析-链接如下: (02)Cartographer源码无死角解析- (00)目录_最新无死角讲解&#xff1a;https://blog.csdn.net/weixin_43013761/article/details/127350885 文末…

项目管理工具dhtmlxGantt甘特图入门教程(八):数据加载(二)

DhtmlxGantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表&#xff0c;可满足应用程序的所有需求&#xff0c;是最完善的甘特图图表库。 这篇文章给大家讲解如何利用dhtmlxGantt加载任务日期。 DhtmlxGantt正版试用下载&#xff08;qun&#xff1a;764148812&#x…

【Linux】进程状态、优先级和进程切换

大家好我是沐曦希&#x1f495; 文章目录一、操作系统进程1.运行队列2.进程状态二、Linux进程状态三、两个特殊进程1.僵尸进程2.孤儿进程四、进程优先级1.优先级概念2.查看系统进程3.PRI和NI4.nice值的更改5.特性五、进程切换1.并发2.进程如何切换一、操作系统进程 什么是进程…

axios拦截器、ElementUI组件的使用

一、axios拦截器 1、axios模块的作用 是对基于http请求的封装。在浏览器对异步请求对象XMLHttpRequest进行封装 2、拦截器 ​ &#xff08;1&#xff09;请求拦截器&#xff1a;对客户端发起的请求进行统一的前期处理&#xff08;token、时间戳、cookie等&#xff09; ​ …

电脑软件经常出现程序未响应是什么原因?及4种解决方法总结

对于电脑小白来说&#xff0c;电脑经常会出现一下莫名其妙的问题&#xff0c;下面我总结的这些方法可以帮大家排除电脑的问题&#xff0c;让电脑速度如飞。资源不足&#xff1a;如果您的电脑资源不足&#xff0c;比如内存或 CPU 使用率过高&#xff0c;那么程序可能会变得不稳定…

【Linux操作系统】多线程(二)

文章目录4. 线程池5. 单例模式5.1 饿汉模式5.2 懒汉模式6. STL、智能指针和线程安全6.1 STL中的容器是否是线程安全的6.2 智能指针是否是线程安全的6.3 其他常见的各种锁7. 读者写者模型7.1 基本概念7.2 读写锁7.3 基本操作7.4 优先级4. 线程池 介绍 一种线程使用模式。线程过…

论文分享 | MnTTS2: 开源的多说话人蒙古语TTS数据集

本次分享内蒙古大学蒙古文信息处理重点实验室、蒙古文智能信息处理技术国家地方联合工程研究中心及语音理解与生成实验室 (S2LAB) 共同发布的开源多说话人蒙古语语音合成数据集及其基线模型。相关论文《MnTTS2: An Open-Source Multi-Speaker Mongolian Text-to-Speech Synthes…

【Java编程进阶】Java异常详解

推荐学习专栏&#xff1a;Java 编程进阶之路【从入门到精通】&#xff0c;从入门到就业精通&#xff0c;买不了吃亏&#xff0c;买不了上当&#xff01;&#xff01; 文章目录1. 异常2. 异常的体系3. Error4. 异常产生的过程5. throw 关键字6. 异常处理6.1 throws 关键字6.2 tr…

基于Node.js和vue的师生互助平台

摘 要随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&am…

Jetpack Compose中的软键盘与焦点控制

FocusRequester 与 FocusManager 在 Compose 中&#xff0c;可以通过 FocusRequester 与 FocusManager 这两个对象可以主动在代码中控制焦点获取和取消焦点&#xff0c;其中FocusRequester可以用来获取焦点&#xff0c;通过调用它的requestFocus()方法来实现&#xff0c;而 Fo…