HCRM博客

CentOS8一键安装Python3.12与保留Python2.7环境攻略

CentOS8编译安装Python3.12并保留2.7:一条命令不踩坑,老脚本继续跑

CentOS8编译安装Python3.12并保留2.7

CentOS8一键安装Python3.12与保留Python2.7环境攻略-图1

系统自带的Python2.7一删,yum直接罢工;手动rpm包装Python3.12,版本又老得掉牙。想两手抓,只能源码编译。下面这份笔记把坑全部踩平,照着敲,半小时就能让两个版本和平共处。

为什么一定要保留2.7

CentOS8里,yum、firewall-cmd、authconfig这些老工具硬编码写死了/usr/bin/python。一旦你把系统默认指向改成3.x,开机脚本直接报错,SELinux跟着抽风。保险做法:系统默认不动,新程序显式调用python3.12。

编译前的系统体检

1. 确认gcc、make在不在:which gcc没返回就dnf groupinstall "Development Tools" -y

把缺掉的库一次性补齐,省得编译到一半报错:dnf install openssl-devel bzip2-devel libffi-devel zlib-devel readline-devel sqlite-devel xz-devel -y

CentOS8一键安装Python3.12与保留Python2.7环境攻略-图2

给/usr/local单独划一个卷更好,没条件也无所谓,记得别把--prefix写进系统目录,防止以后rm -rf误伤。

下载、解压、校验一条龙

去官网扒最新稳定tarball,wget断点续传省流量:

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

顺带把.sig文件拉下来,gpg --verify Python-3.12.0.tgz.asc,提示“Good signature”再往下走,别嫌麻烦,被篡改的源码分分钟给你埋后门。

编译参数这样写,后期最省心

CentOS8一键安装Python3.12与保留Python2.7环境攻略-图3

解压后先进目录,再新建一个build文件夹,外置编译干净:

mkdir ../py312-build && cd ../py312-build

配置命令:

../Python-3.12.0/configure --prefix=/usr/local/python3.12 --enable-optimizations --with-ensurepip=install --enable-shared LDFLAGS="-Wl,-rpath /usr/local/python3.12/lib"

重点解释:

--enable-optimizations跑一遍PGO,性能提升一成左右,编译时间翻倍,服务器空载就开着;

--enable-shared把libpython3.12.so弄出来,以后给mod_wsgi、uwsgi这类动态加载用;

rpath直接写死库搜索路径,省得你再去/etc/ld.so.conf.d里加文件。

make & install 避坑指南

make -j$(nproc),CPU有多少核就飙多少,十来分钟完事。接着别急着install,跑测试:

make -j$(nproc) test

看到“Tests result: SUCCESS”再make altinstall。注意,必须是altinstall,它会生成python3.12、pip3.12,不会覆盖系统自带的/usr/bin/python。

把命令扔进$PATH,随用随调

CentOS8用/etc/profile.d最干净:

echo 'export PATH="/usr/local/python3.12/bin:$PATH"' > /etc/profile.d/python3.12.sh && chmod +x /etc/profile.d/python3.12.sh

重新登录,python3.12 -V能吐出“Python 3.12.0”就算成功。老脚本开头写#!/usr/bin/python2,继续跑,谁也不碍谁。

pip换国内源,下载嗖嗖的

mkdir -p ~/.pip && cat > ~/.pip/pip.conf <

[global]

index-url = https://pypi.tuna.tsinghua.edu.cn/simple

trusted-host = pypi.tuna.tsinghua.edu.cn

EOF

以后pip3.12 install模块,速度从十几K拉到几兆。

多版本并存,venv是最佳搭档

新项目别直接装全局包:

python3.12 -m venv /opt/proj/venv

激活后pip想装啥装啥,系统目录保持处女状态。要跑定时任务,在crontab里先source venv/bin/activate,再执行脚本,一条命令解决依赖地狱。

常见报错速查表

1. “No module named '_ctypes'”:漏装libffi-devel,装完重新configure。

“can not load libpython3.12.so”:忘了--enable-shared,或者rpath没写,ldconfig也救不了,只能重编。

“SSL module not available”:openssl-devel版本太老,dnf update下再重来。

卸载也优雅,别直接删目录

真有一天想回退,进入当初build目录:

make uninstall

会把/usr/local/python3.12清得干干净净,再把profile.d里的sh文件删掉,系统瞬间回到最初模样。

装依赖→下载源码→configure带优化→make altinstall→写PATH→用venv隔离。照着敲,CentOS8就能稳稳当当同时抱住Python2.7与3.12两条大腿。

本站部分图片及内容来源网络,版权归原作者所有,转载目的为传递知识,不代表本站立场。若侵权或违规联系Email:zjx77377423@163.com 核实后第一时间删除。 转载请注明出处:https://blog.huochengrm.cn/pc/42002.html

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
请登录后评论...
游客游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~