news 2026/9/12 13:46:21

【CentOS7】CentOS 7 编译安装 Python 3.11.9

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【CentOS7】CentOS 7 编译安装 Python 3.11.9

Python 3.11 pip 无 SSL 模块问题:使用 OpenSSL 3.0.13 重新编译 Python

注意:以下操作最好在测试机试验一遍

一、问题原因分析(为什么 pip 会缺 SSL?)

Python 的ssl模块并不是纯 Python 实现,而是:

  • 编译时依赖系统中的OpenSSL

  • 如果在./configure阶段:

    • 找不到openssl/ssl.h
    • 或 OpenSSL 版本不兼容
  • 那么:

    • _ssl.so不会被编译
    • import ssl会失败
    • pip 无法访问 HTTPS

📌Python 3.11 推荐使用 OpenSSL ≥ 1.1.1(3.0.x 完全支持)


三、解决思路总览

我们的解决方案分为 5 步:

  1. 安装并准备OpenSSL 3.0.13
  2. 清理 Python 旧的编译残留
  3. 使用--with-openssl明确指定 OpenSSL 路径
  4. 验证_ssl模块是否成功生成
  5. 验证ssl/pip是否可用

四、完整自动化编译脚本(推荐)

⚠️ 假设:

  • OpenSSL 安装在:/usr/local/openssl-3.0.13
  • Python 源码在:/usr/local/src/Python-3.11.9

🔧 一键编译脚本

#!/bin/bashset-eecho"=== 开始重新编译 Python 3.11.9 with OpenSSL 3.0.13 ==="cd/usr/local/src/Python-3.11.9# 清理echo"清理之前的编译..."sudomakedistclean2>/dev/null||true# 设置环境变量exportOPENSSL_DIR="/usr/local/openssl-3.0.13"exportLDFLAGS="-L${OPENSSL_DIR}/lib64"exportCPPFLAGS="-I${OPENSSL_DIR}/include"exportLD_LIBRARY_PATH="${OPENSSL_DIR}/lib64:$LD_LIBRARY_PATH"exportPKG_CONFIG_PATH="${OPENSSL_DIR}/lib64/pkgconfig"echo"配置 Python..."sudo-E ./configure\--prefix=/usr/local/python3.11.9\--with-openssl=${OPENSSL_DIR}\--with-openssl-rpath=auto\--enable-shared\--enable-loadable-sqlite-extensions\LDFLAGS="-Wl,-rpath=/usr/local/python3.11.9/lib -L${OPENSSL_DIR}/lib64"\CPPFLAGS="-I${OPENSSL_DIR}/include"# 检查配置结果echo""echo"=== 检查 OpenSSL 配置 ==="ifgrep-q"checking for openssl/ssl.h in${OPENSSL_DIR}... yes"config.log&&\grep-q"checking whether compiling and linking against OpenSSL works... yes"config.log;thenecho"✓ OpenSSL 配置成功"elseecho"✗ OpenSSL 配置失败,请检查 config.log"grep-A5"checking for openssl"config.log|tail-20exit1fiecho""echo"开始编译(这可能需要几分钟)..."sudo-Emake-j$(nproc)echo""echo"检查 _ssl 模块是否生成..."SSL_MODULE=$(find.-name"_ssl*.so"|head-1)if[-n"$SSL_MODULE"];thenecho"✓ 找到 SSL 模块:$SSL_MODULE"elseecho"✗ 未找到 SSL 模块"exit1fiecho""echo"安装 Python..."sudomakeinstallecho""echo"配置系统库和环境..."echo"/usr/local/python3.11.9/lib"|sudotee/etc/ld.so.conf.d/python3.11.confsudoldconfigecho'export PATH=/usr/local/python3.11.9/bin:$PATH'|sudotee/etc/profile.d/python3.11.shsource/etc/profile.d/python3.11.shecho""echo"=== 验证安装 ==="echo"Python 版本:"/usr/local/python3.11.9/bin/python3.11 --versionecho""echo"OpenSSL 版本:"/usr/local/python3.11.9/bin/python3.11 -c"import ssl; print(ssl.OPENSSL_VERSION)"echo""echo"测试 pip:"/usr/local/python3.11.9/bin/pip3.11 --versionecho""echo"=== 安装完成 ==="

五、关键参数详解(非常重要)

1️⃣--with-openssl

--with-openssl=/usr/local/openssl-3.0.13

👉 明确告诉 Python:用哪个 OpenSSL 编译


2️⃣--with-openssl-rpath=auto

--with-openssl-rpath=auto

👉 避免运行时找不到libssl.so
👉比手动改 LD_LIBRARY_PATH 更稳定


3️⃣--enable-shared

--enable-shared

👉 生成libpython3.11.so
👉 对 embedding、某些 C 扩展很有用


六、如何确认 SSL 模块真的生效?

✅ 1. 查看_ssl模块

find/usr/local/python3.11.9 -name"_ssl*.so"

有输出即成功。


✅ 2. Python 内部验证

python3.11 -c"import ssl; print(ssl.OPENSSL_VERSION)"

示例输出:

OpenSSL 3.0.13 30 Jan 2024

✅ 3. pip 验证

pip3.11installrequests

无 HTTPS 报错即可 🎉


七、常见错误排查

❌ configure 阶段找不到 OpenSSL

checking for openssl/ssl.h... no

解决:

  • 确认 OpenSSL 是源码安装
  • 确认${OPENSSL_DIR}/include/openssl/ssl.h存在

❌ 运行时报 libssl 找不到

error while loading shared libraries: libssl.so.3

解决:

ldd$(whichpython3.11)ldconfig

或检查--with-openssl-rpath


八、总结

✅ 本文通过显式指定 OpenSSL 3.0.13
✅ 从编译阶段解决 Python 缺失 SSL 模块的问题
✅ 适用于:

  • pip 无法使用
  • requests / urllib3 报 SSL 错
  • Python 3.11 源码安装环境

一句话总结:

pip 没 SSL,不是 pip 的问题,是 Python 编译时 OpenSSL 没配好。


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/12 6:52:04

4倍加速:MiniGPT-4内存优化与缓存策略深度解析

4倍加速:MiniGPT-4内存优化与缓存策略深度解析 【免费下载链接】MiniGPT-4 Open-sourced codes for MiniGPT-4 and MiniGPT-v2 (https://minigpt-4.github.io, https://minigpt-v2.github.io/) 项目地址: https://gitcode.com/gh_mirrors/mi/MiniGPT-4 你是否…

作者头像 李华
网站建设 2026/9/11 23:16:10

21、帧缓冲接口设计与STBmenu GUI工具包使用指南

帧缓冲接口设计与STBmenu GUI工具包使用指南 1. SDL基础操作与事件处理 在使用SDL进行图形显示时,首先需要了解如何将图像显示在屏幕上以及如何处理用户事件。以下是一个简单的“Hello, world!”示例: SDL_Rect helloRect = {150,100,0,0}; /* {x, y, width, height}…

作者头像 李华
网站建设 2026/9/12 5:41:00

lidR终极指南:5步掌握激光雷达林业分析核心技术

还在为传统林业调查的繁琐耗时而苦恼吗?🌲 想要快速获取精准的森林参数却无从下手?lidR包作为R语言中最专业的激光雷达数据处理工具,能够让你在几小时内完成以往需要数月的林业调查工作! 【免费下载链接】lidR Airborn…

作者头像 李华
网站建设 2026/9/12 20:41:11

为什么顶尖量子工程师都在用VSCode调试Qiskit?真相令人震惊

第一章:为什么顶尖量子工程师都在用VSCode调试Qiskit?真相令人震惊在量子计算领域,Qiskit 已成为最主流的开发框架之一,而 VSCode 凭借其强大的扩展生态和调试能力,正悄然成为顶尖量子工程师的首选 IDE。两者的结合不仅…

作者头像 李华
网站建设 2026/9/12 3:03:44

2026中专机电专业必考职业资格证指南

机电专业涉及机械、电子、自动化等多领域,职业资格证是就业和职业发展的重要凭证。以下是2026年中专机电专业学生需关注的必考证书,包含证书名称、考试内容、报考条件及用途,并附CDA证书相关信息。机电专业核心职业资格证证书名称发证机构报考…

作者头像 李华
网站建设 2026/9/11 23:17:57

Q#调用Python模块时代码导航失效?资深工程师教你4步快速排查

第一章:Q#-Python 的代码导航概述在量子计算与经典编程语言融合的背景下,Q# 与 Python 的协同开发模式逐渐成为主流。通过 Q# 编写的量子算法可以借助 Python 进行控制流管理、数据预处理和结果可视化,而高效的代码导航能力是实现这一协作的关…

作者头像 李华