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

文章详细介绍了如何在CentOS8系统中从Python3.6升级到3.9.9,包括下载Python源码、切换root权限、解决权限问题、编译安装、创建软链接以及将新安装的Python路径添加到PATH环境变量中。过程中提到了可能遇到的编译错误及其解决方案,如升级gcc或移除--enable-optimizations参数。
摘要由CSDN通过智能技术生成


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應該這樣配置后就不會有警告了

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值