手动安装OpenSSL1.1.1

根据报错信息 Could not build the ssl module! Python requires a OpenSSL 1.1.1 or newer,说明当前系统中的 OpenSSL 版本低于 1.1.1,或者 Python 编译时未找到符合要求的 OpenSSL 库。以下是分步解决方案:

1. 检查当前 OpenSSL 版本

首先确认系统中已安装的 OpenSSL 版本:

openssl version
  • 如果版本低于 1.1.1(如 1.0.2 或更早),需升级 OpenSSL。
  • 如果版本符合要求(≥1.1.1),但 Python 仍找不到,则可能是路径配置错误(见步骤 3)。

2. 安装 OpenSSL 1.1.1 或更高版本

情况 1:通过系统包管理器安装(推荐)
  • Ubuntu/Debian(1.1.1 及以上)

    sudo apt update
    sudo apt install libssl-dev  # 通常会安装最新版(≥1.1.1)
    
    • 若系统默认源中没有新版,可添加 Ubuntu Security 源 或手动编译(见情况 2)。
  • CentOS/RHEL 7+

    sudo yum install openssl-devel  # 确保版本 ≥1.1.1
    
    • 若版本不足(如 CentOS 7 自带 1.0.2),需手动编译新版 OpenSSL(见情况 2)。
  • macOS(通过 Homebrew)

    brew install openssl  # 安装最新版(默认 ≥1.1.1)
    
情况 2:手动编译 OpenSSL 1.1.1+(适用于自定义安装)

从 OpenSSL 官网 下载源码(如 openssl-1.1.1q.tar.gz),编译并安装到自定义路径(如 /opt/openssl):

tar -zxvf openssl-1.1.1q.tar.gz
cd openssl-1.1.1q
./config --prefix=/opt/openssl  # 指定安装路径
make && make install

3. 告诉 Python 编译脚本使用正确的 OpenSSL 路径

情况 1:系统默认路径已正确指向新版 OpenSSL

直接重新配置 Python 编译(无需额外参数):

cd Python-3.x.x  # Python 源码目录
./configure --enable-optimizations
make clean  # 清除旧配置
make && sudo make install
情况 2:手动指定 OpenSSL 安装路径(如自定义安装的 /opt/openssl

编译时通过 --with-openssl 参数指定 OpenSSL 的 安装前缀(非二进制文件路径),并设置头文件和库文件路径:

# 设置环境变量(指向 OpenSSL 的头文件和库文件)
export CPPFLAGS="-I/opt/openssl/include"  # 头文件路径
export LDFLAGS="-L/opt/openssl/lib -Wl,-rpath=/opt/openssl/lib"  # 库文件路径# 配置 Python 编译,指定 OpenSSL 前缀
./configure --enable-optimizations --with-openssl=/opt/openssl
make clean && make -j$(nproc) && sudo make install

4. 常见错误排查

错误 1:--with-openssl 参数填写错误
  • 错误示例:填写为 --with-openssl=/usr/bin/openssl(指向二进制文件,而非安装前缀)。
  • 正确做法:填写 OpenSSL 的安装根目录(如 /opt/openssl,该目录下应有 includelib 文件夹)。
错误 2:旧版本 OpenSSL 残留
  • 若系统同时存在多个 OpenSSL 版本,确保 which openssl 返回的是 ≥1.1.1 的版本路径。
  • 若仍指向旧版本,可通过软链接强制指向新版:
    sudo ln -s /opt/openssl/bin/openssl /usr/bin/openssl  # 示例路径,根据实际情况调整
    
错误 3:依赖库缺失(如 libffi
  • 确保已安装编译所需的全部依赖(见之前回答中的依赖安装命令),例如:
    # Ubuntu/Debian 补充依赖
    sudo apt install libffi-dev# CentOS/RHEL 补充依赖
    sudo yum install libffi-devel
    

5. 验证 SSL 模块是否成功构建

安装完成后,启动 Python 并验证:

import ssl
print(ssl.OPENSSL_VERSION)  # 应输出 ≥1.1.1 的版本号

若不再报错,说明问题解决。

总结

核心步骤:

  1. 确保 OpenSSL 版本 ≥1.1.1(通过包管理器安装或手动编译)。
  2. 编译 Python 时通过 --with-openssl 指定正确的 OpenSSL 安装前缀,并配置头文件和库文件路径。
  3. 清除旧编译缓存,重新编译安装。

根据你的操作系统和 OpenSSL 安装方式,选择对应的步骤执行即可解决问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/78710.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[原创](现代Delphi 12指南):[macOS 64bit App开发]: 跨平台开发同样支持retain()引用计数器处理.

[作者] 常用网名: 猪头三 出生日期: 1981.XX.XX 企鹅交流: 643439947 个人网站: 80x86汇编小站 编程生涯: 2001年~至今[共24年] 职业生涯: 22年 开发语言: C/C++、80x86ASM、Object Pascal、Objective-C、C#、R、Python、PHP、Perl、 开发工具: Visual Studio、Delphi、XCode、…

从 “制造” 到 “品牌”:官网建设助力中国企业突围东南亚

在全球产业链重构与区域经济一体化的浪潮下,中国企业出海已从“战略选项”升级为“生存刚需”。东南亚市场因其地理邻近性、人口红利及政策开放性,成为许多中企出海的“首站试验田”。然而,如何在这一文化多元、竞争激烈的市场中建立品牌认知…

iPhone闹钟无法识别调休致用户迟到,苹果客服称会记录反馈

iPhone闹钟无法识别调休致用户迟到,苹果客服称会记录反馈 基于 6 个来源 因“五一”劳动节调休,4月27日(周日)本应上班,不少iPhone用户却因闹钟未响迟到,“调休”“当苹果闹钟遇到调休”话题登上热搜。苹…

Ubuntu 磁盘空间占用清理(宝塔)

目录 前言1. 基本知识2. 实战 前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 爬虫神器,无代码爬取,就来:bright.cn 本身自搭建了一个宝塔,突然一下子多了好些空…

杰理-安卓通过map获取时间的时候,部分手机切换sbc和aac时候单耳无声音

杰理-安卓通过map获取时间的时候,部分手机切换sbc和aac时候单耳无声音 #if USER_SUPPORT_PROFILE_MAPif(tws_api_get_role()0){ //主机才获取,否则切换sbc 和 aac 的时候影响单耳无声音user_send_cmd_prepare(USER_CTRL_MAP_READ_TIME,0,NULL);} #endif…

Android 进阶开发:深入掌握 ProgressBar 的使用与高级技巧

一、前言 在 Android 开发中,ProgressBar 是一个非常常见且功能强大的控件,用于向用户反馈操作的进度。虽然它的基础用法简单,但对于进阶开发者来说,如何通过自定义动画、插值器、样式和逻辑控制来提升用户体验,是一个值得深入研究的方向。 本文将带你从 基本使用入手,…

AGILE:开启LLM Agent强化学习的创新框架

在大语言模型(LLMs)蓬勃发展的今天,基于LLMs构建的智能体成为研究热点。但如何将各组件整合优化仍是难题。本文提出的AGILE框架给出了创新解法,它不仅统一多组件,还让智能体性能超越GPT-4。想知道它是如何做到的吗&…

java使用websocket推送消息到页面

文章目录 一、项目背景二、使用方式1.vue2javaspringpom.xmlRealtimeMonitor.vueMonitorTaskExe.javaWSTopicEnum.javaWServerHelper.java 2.vue3javaspringbootpom.xmlTopologyView.vueAlarmDataInquiryController.javaPushService.javaPushWebSocketHandler.javaWebSocketCon…

小市值策略复现(A股选股框架回测系统)

相关config配置 https://quantkt.com/forumDetail?id201043 很早就知道了小市值模型,正好量化选股回测框架出来了,把最裸的小市值复现下,顺便验证下框架逻辑。 科普: 小市值策略基于 “小市值效应”,即从历史数据来看&#xf…

解决 Flutter 在 iOS 真机上构建失败的问题

在开发 Flutter 应用时,有时会在尝试将应用部署到 iOS 真机时遇到构建失败的问题。错误信息通常类似于以下内容: Could not build the precompiled application for the device. Uncategorized (Xcode): Timed out waiting for all destinations matchi…

OCR(Optical Character Recognition),光学字符识别

参考:如何让机器读懂图片上的文字?飞桨助您快速了解OCR - 知乎 OCR(Optical Character Recognition),译为光学字符识别,是指通过扫描等光学输入方式将各种票据、报刊、书籍、文稿及其它印刷品的文字转化为图…

一网统管建设组织保障分工常见表

在 “一网统管” 建设进程中,强有力的组织保障体系与各业务部门间的紧密分工协作是确保建设成效的关键。 从组织保障层面来看,需建立专门的 “一网统管” 建设领导小组,由政府高层领导担任组长,各关键业务部门负责人作为组员,以此强化对整体建设工作的统筹规划与组…

Python中的defaultdict方法

文章目录 核心特点基本语法常见使用场景1. 分组数据(默认值为列表)2. 计数(默认值为整数)3. 集合操作(默认值为集合)4. 嵌套字典 注意事项与普通字典对比总结1. 键(Key)的类型2. 值&…

结构化数据、半结构化数据、非结构化数据 差异与实践指南

结构化数据、半结构化数据、非结构化数据 差异与实践指南 一、核心概念与差异对比 维度结构化数据半结构化数据非结构化数据数据结构固定Schema(行列明确)含标签/层级结构(无固定Schema)无预定义结构存储方式关系型数据库&#x…

【AI News | 20250429】每日AI进展

AI Repos 1、aci ACI.dev是一个开源基础设施层,旨在为AI智能体的工具使用提供支持。它通过统一的模型-上下文-协议(MCP)服务器或轻量级Python SDK,使智能体能够以感知意图的方式访问600多种工具,并具备多租户认证、细…

【C++ 类和数据抽象】消息处理示例(1):从设计模式到实战应用

目录 一、数据抽象概述 二、消息处理的核心概念 2.1 什么是消息处理? 2.2 消息处理的核心目标 三、基于设计模式的消息处理实现 3.1 观察者模式(Observer Pattern) 3.2 命令模式(Command Pattern) 四、实战场景…

【Android】自定义Trace

1,Trace分析 Android掉帧分析-CSDN博客 2,自定义Trace 以下,android.os.Trace公开了以下API 1,beginSection与endSection联合使用,只能在同一个线程 2,beginAsyncSection与endAsyncSection可以在不同线程…

基于tabula对pdf中的excel进行识别并转换成word(三)

上一节中是基于PaddleOCR对图片中的excel进行识别并转换成word优化,本节改变思路,直接从pdf中读取表格的信息,具体思路如下所述。 PDF中的表格数据如下截图所示: 一、基于tabula从PDF中提取表格 df_list tabula.read_pdf("…

Java中的接口和抽象类

Java 抽象类与接口:区别、应用与选择 在 Java 编程的世界里,抽象类和接口是两个极为重要的概念,它们在实现代码抽象、提高代码复用性和可维护性方面发挥着关键作用。然而,很多开发者在使用时容易混淆这两个概念。本文将深入探讨 …

Java读Excel:解析阿里云easyExcel导入文件的行号

文章目录 引言I 解析阿里云easyExcel导入文件的行号声明解析对象的基类判断Excel解析对象类型是否包含继承某个类 isAssignableFromJava 转换list类型并设置下标到元素对象属性II 封装excel 文件读取excel 文件读取用法文件导入上下文III 参数校验工具类校验参数是否合法 (jaka…