1. 升级前的准备:为什么和凭什么
如果你还在用CentOS系统里那个老掉牙的Python 2.7,我劝你赶紧动手升级。不是我吓唬你,Python 2官方早在2020年就彻底停止维护了,这意味着什么?意味着没有安全更新,没有漏洞修复,你的服务器就像一座不设防的城堡,随时可能被攻破。更现实的是,现在稍微新一点的Python库和框架,比如Django 3.x、TensorFlow 2.x,早就放弃了对Python 2的支持。你想用个新工具,装个新包,动不动就给你报错,那种感觉就像开着一辆老爷车想上高速公路,不是不行,是真的很费劲。
我自己就吃过这个亏。几年前维护一个老项目,依赖全是Python 2.7的,结果一个关键的加密库爆出严重漏洞,但因为Python 2已经停止支持,根本没有官方补丁,最后只能自己硬着头皮去改源码,折腾了好几天。从那以后,我就下定决心,所有服务器环境,能升级Python 3的绝不留恋。今天我要分享的,就是把CentOS系统里的Python 2.7,平滑升级到Python 3.8的完整过程。我管这叫“无缝升级”,意思就是升级完,你原来的系统工具(比如yum)还能正常用,新的Python 3环境也搭建好了,两者互不干扰,平稳过渡。
在动手之前,我们得先摸清家底。打开你的终端,连上你的CentOS服务器,输入 python -V 看看。如果蹦出来的是“Python 2.7.5”之类的,那咱们就对上号了。再输入 which python 命令,它会告诉你当前系统默认的python命令到底指向哪里,通常是 /usr/bin/python,并且它是个指向Python 2.7解释器的软链接。搞清楚现状很重要,因为我们的升级策略不是粗暴地覆盖,而是“新旧共存,逐步切换”。我们会在系统里安装一个全新的Python 3.8,和老的Python 2.7并肩运行,然后通过修改软链接的方式,让python这个命令指向新的3.8,同时确保那些依赖Python 2的系统脚本(比如yum)还能找到它们的老朋友。这个思路是整个过程安全的核心。
2. 搭建编译舞台:安装那些必不可少的“家伙事儿”
Python的安装,尤其是从源码编译安装,就像盖房子,你得先把砖瓦水泥(也就是各种开发库和编译工具)备齐了。CentOS系统默认的软件仓库里工具很全,但为了编译一个功能完整的Python 3.8,我们得手动补充一些开发包。这一步千万别图省事跳过,不然编译过程中报错,你都不知道从哪儿查起。
首先,我们来安装最核心的编译工具——GCC。你可以把GCC想象成房子的总工程师和施工队,没有它,源码就是一堆看不懂的图纸,变不成可执行的程序。安装命令很简单:yum install -y gcc。但光有工程师还不够,盖房子需要各种建材。Python解释器本身依赖很多底层的库来实现压缩、加密、数据库连接等功能。所以我们需要一口气把下面这些开发包都装上:
yum install -y zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel xz xz-devel libffi-devel
我来简单说说这几个包是干嘛的,这样你以后遇到类似问题也能自己排查。zlib-devel和bzip2-devel是处理压缩文件的,Python安装包(pip)下载的很多库都是压缩格式。openssl-devel和libffi-devel至关重要,它们提供了SSL/TLS加密支持和外部函数接口,没有它们,pip安装网络上的包会失败,一些需要调用C库的Python包(比如cryptography)也编译不了。sqlite-devel让Python能使用内置的SQLite数据库模块。readline-devel则让你在交互式Python命令行里可以用上下箭头翻历史命令,体验更好。
这里有个小坑我踩过。有时候默认的yum源速度慢或者包不全,你可以先更新一下yum的缓存:yum makecache。如果安装过程中提示某个包找不到,可能是包名有细


1万+

被折叠的 条评论
为什么被折叠?



