Python 3.11 编译后缺少 _ssl 模块:从 OpenSSL 共享库到重新编译的完整修复记录
本文记录了一次 Python 3.11.9 源码安装后缺少 _ssl 模块的排查与修复过程。表面上 Python 已安装成功,但执行 import ssl 时却报出 No module named '_ssl',原因并不在 Python 主程序,而是 SSL 相关扩展在编译阶段失败。 问题的关键有三点:一是 OpenSSL 最初被编译成了静态库 no-shared,导致 Python 的 _ssl 动态扩展无法正常链接;二是自定义安装的 OpenSSL 共享库位于 /usr/local/openssl11/lib,却没有被系统动态链接器识别;三是 Python 源码目录中的旧构建缓存干扰了重新编译,导致补装依赖后问题依旧。 作者最终采用了独立安装 OpenSSL 共享库的方案:重新编译 OpenSSL 时启用 shared,并通过 ldconfig 注册库路径;随后彻底清理 Python 构建缓存,重新 configure 时显式指定 OpenSSL 目录和运行时路径,最后成功编译出 _ssl 模块并完成 Python 安装。这个案例说明,在 Linux 上源码编译 Python 时,SSL 模块是否可用,取决于 OpenSSL 的编译方式、链接路径和 Python 的重新构建是否彻底。