手動安裝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.pswp.cn/pingmian/78710.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/78710.shtml
英文地址,請注明出處:http://en.pswp.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…