当前位置: 首页 > news >正文

Centos7 安装Python3.11

在 Centos7 上安装Python3.11时,经常遇到 ssl 模块无法使用 或编译失败的问题,原因是:

Python 3.11 需要 OpenSSL 1.1.1+,而 CentOS 7 默认的 OpenSSL 版本是 1.0.2k,太旧。

但直接升级系统自带的 OpenSSL 包会破坏系统稳定性(如 yumssh 可能依赖旧版本)。

正确做法:编译安装 OpenSSL 1.1.1+ 到自定义路径,不覆盖系统默认版本

这样既能满足 Python 3.11 的编译需求,又不会影响系统安全。

解决方案:分步操作(推荐生产环境使用)

步骤 1:安装编译依赖

sudo yum update -y
sudo yum groupinstall -y "Development Tools"
sudo yum install -y wget perl-core zlib-devel

步骤 2:编译安装 OpenSSL 1.1.1(不覆盖系统)

1. 下载并解压 OpenSSL 1.1.1(以 1.1.1w 为例)
cd /tmp
wget https://www.openssl.org/source/openssl-1.1.1w.tar.gz
tar -xzf openssl-1.1.1w.tar.gz
cd openssl-1.1.1w
2. 编译安装到 /usr/local/openssl-1.1.1
./config --prefix=/usr/local/openssl-1.1.1 --openssldir=/usr/local/openssl-1.1.1 shared zlib
make -j $(nproc)
sudo make install

--prefix 指定安装路径,避免污染系统目录
shared 生成动态库,供 Python 链接使用

步骤 3:配置系统库路径(让动态链接器能找到新 OpenSSL)

echo '/usr/local/openssl-1.1.1/lib' | sudo tee /etc/ld.so.conf.d/openssl-1.1.1.conf
sudo ldconfig

✅ 这一步让系统知道新 OpenSSL 库的位置

步骤 4:编译安装 Python 3.11(链接到新 OpenSSL)

1. 下载 Python 3.11 源码
cd /tmp
wget https://www.python.org/ftp/python/3.11.9/Python-3.11.9.tgz
tar -xzf Python-3.11.9.tgz
cd Python-3.11.9
2. 配置、编译、安装
./configure --prefix=/usr/local/python3.11 \--enable-optimizations \--with-openssl=/usr/local/openssl-1.1.1make && make install

步骤 4:验证 SSL 模块是否正常

/usr/local/python3.11/bin/python3.11 -c "import ssl; print(ssl.OPENSSL_VERSION)"

步骤 5:创建全局软链接

# 警告:不要在生产服务器上轻易覆盖 python/pip!
sudo ln -sf /usr/local/python3.11/bin/python3.11 /usr/local/bin/python3
sudo ln -sf /usr/local/python3.11/bin/pip3.11    /usr/local/bin/pip3# 验证软链接是否生效
which python3
# 输出:/usr/local/bin/python3.11which pip3
# 输出:/usr/local/bin/pip3.11python3 --version
# 输出:Python 3.11.9pip3 --version
# 输出:pip 24.x.x ...
http://www.dtcms.com/a/313171.html

相关文章:

  • 【Linux系统编程】进程信号
  • leecode2958 最多K个重复元素的最长子数组
  • 解决飞书文档中PDF文档禁止下载的问题
  • 提升工作效率的利器:Qwen3 大语言模型
  • Python 程序设计讲义(60):Python 的函数——递归函数
  • 出现OOM怎么排查
  • 研报复现|史蒂夫·路佛价值选股法则
  • linux ollama模型缓存位置变更
  • 音视频学习(四十九):音频有损压缩
  • 机器学习之决策树(二)
  • 解决PyCharm的Terminal终端conda环境默认为base的问题
  • 【硬件-笔试面试题】硬件/电子工程师,笔试面试题-57,(知识点:电感的选型,电感参数,电感量,饱和电流,直流电阻,自谐振频率)
  • 可视化AI应用构建工具(Dyad)
  • 【内容规范】关于标题中【】标记的使用说明
  • 2.0 vue工程项目的创建
  • TableCurve 3D:自动化曲面拟合与方程发现
  • Steam饥荒联机版多人服务器搭建全解析 -- 阿里云Linux系统构建云服务器
  • Flutter dart控制流程
  • Shell脚本-变量的定义规则
  • 【DL学习笔记】深入学习tenser
  • electron-多线程
  • JDBC核心技术与预编译SQL实战
  • 计算机网络:如何将一个C类网络划分成两个子网
  • 集成电路学习:什么是USB HID人机接口设备
  • Web前端文件上传安全与敏感数据安全处理
  • 时序论文44 | TwinsFormer:通过两个交互组件重构时间序列内在依赖关系
  • [spring-cloud: 服务发现]-源码解析
  • 医院课题管理全动态流程 (AI-Enhanced, Data-Driven Research Lifecycle)
  • 位运算在权限授权中的应用及Vue3实践
  • 第2章算法分析:其他渐进复杂度符号