日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python3.8 安装 ssl 模块 和 _ctypes 模块

發布時間:2024/1/18 python 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python3.8 安装 ssl 模块 和 _ctypes 模块 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 前情提要
    • 安裝 openssl-1.1.1
    • 重新編譯安裝 python3.8
    • -rpath 編譯選項介紹
    • python3.8 跟 python3.10 的區別

前情提要

我在之前給 python3.10 安裝 ssl 模塊后以為該步驟 “對于 python3.6、python3.8 應該同樣適用。” 。今天晚上我嘗試給服務器安裝一個帶 ssl 模塊的 python3.8 的時候,照著之前安裝 3.10 的方案來,然后失敗了-_-||。又折騰了一下,發現 3.8 和 3.10 的配置腳本是有區別的,不能一概而論,本文總結了一下 3.8 如何正確的編譯安裝 python 的 openssl 模塊及其原理,以及 3.8 和 3.10 配置腳本的區別。

安裝 openssl-1.1.1

  • wget https://www.openssl.org/source/openssl-1.1.1n.tar.gz --no-check-certificate 下載openssl1.1.1
  • tar zxf openssl-1.1.1n.tar.gz 解壓
  • cd openssl-1.1.1n
  • ./Configure --prefix=/usr/local/openssl 設置安裝目錄 可以自定義 但是要記住,后面會用到
  • make -j && make install 編譯并安裝
  • 將 /usr/local/openssl/lib 路徑添加到系統動態庫查找路徑中,在 home 目錄下的 .bashrc 文件最后面添加下面這一行export LD_LIBRARY_PATH=/usr/local/openssl/lib:$LD_LIBRARY_PATH
  • souce .bashrc 立即生效

重新編譯安裝 python3.8

  • 切換到 python3.8 解壓包目錄
  • 已經編譯過的可以先 make clean 清理一下
  • yum install libffi-devel -y 安裝 libffi-devel ,這個是為了 _ctypes 模塊
  • ./configure --prefix=/usr/local/python3 --with-openssl=/usr/local/openssl --with-ssl-default-suites=openssl --with-system-ffi
  • make -j && make install

到這應該安裝成功了,如果還有問題的話留言討論吧-_-||

-rpath 編譯選項介紹

-rpath 是 gcc 的一個編譯選項,用于指定程序運行時動態鏈接庫的搜索路徑。當程序運行時需要動態鏈接庫時,系統會在指定的路徑中搜索動態鏈接庫。

例如,假設有一個程序 a.out,它需要動態鏈接庫 libfoo.so,而 libfoo.so 位于 /usr/local/lib 目錄下,那么可以使用以下命令編譯程序:

gcc -o a.out a.c -L/usr/local/lib -lfoo -Wl,-rpath=/usr/local/lib

其中,-L 選項指定編譯器在編譯時搜索庫文件的路徑,-l 選項指定需要鏈接的庫文件名。-Wl,-rpath=/usr/local/lib 選項指定程序運行時搜索動態鏈接庫的路徑。

這樣,當程序 a.out 運行時,系統會在 /usr/local/lib 目錄下搜索 libfoo.so 動態鏈接庫。

python3.8 跟 python3.10 的區別

查看 python3.8 配置腳本關于 openssl 的幫助信息

查看 python3.10.3 配置腳本關于 openssl 的幫助信息

python3.10.3 中多出來的這個選項是說是否在 gcc 編譯的時候傳遞 -rpath 選項給編譯器,所以可以按我這篇文章中的做法處理。
python3.8 的配置腳本沒有這個選項,但是他編譯過程中又查找的是名為 libssl.so 的動態庫。這時候我們不能傳遞 -rpath=/usr/local/openssl/lib, 只能采取其他辦法,想來這也是 3.10 新增選項的原因。
那要怎么解決這個問題呢,我想到有四種解決方案:

  • 方法一 屬于奇技淫巧,將動態庫文件名實際指向靜態庫文件,即 ln -s libxxx.a libxxx.so,這樣即使沒有 -rpath 選項,也沒關系了,因為跟 python 編譯鏈接的是靜態庫,而靜態庫的路徑已經由 --with-openssl=/usr/local/openssl 選項指定了。(不推薦)

  • 方法二 可以修改 python 的編譯腳本,強行指定 -rpath,這種做法和官方 3.10 做的效果一樣。(不推薦)

  • 方法三 在系統的動態庫默認搜索路徑下創建一個指向 /usr/local/openssl/lib/ 下兩個需要的動態庫的軟鏈接。(不推薦)
    Linux系統默認的C動態庫搜索目錄包括以下幾個:

    /lib /usr/lib /usr/local/lib

    這些目錄是在系統啟動時就被設置好的,當程序需要鏈接動態庫時,系統會自動在這些目錄中搜索相應的庫文件。

  • 方法四 就是本文所采用的方案,將 /usr/local/openssl/lib 添加到 LD_LIBRARY_PATH 環境變量中了,優雅且簡單。(推薦)

  • 總結

    以上是生活随笔為你收集整理的python3.8 安装 ssl 模块 和 _ctypes 模块的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。