国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

python報(bào)錯(cuò):ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+

這篇具有很好參考價(jià)值的文章主要介紹了python報(bào)錯(cuò):ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

python報(bào)錯(cuò):ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+

一、問(wèn)題描述

python3 安裝了requests (pip install requests

二、問(wèn)題分析

說(shuō)明:requests包引入了urllib3,而新版本的urllib3 需要OpenSSL 1.1.1+以上版本,否則報(bào)錯(cuò):
ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+,
currently the ‘ssl’ module is compiled with ‘OpenSSL 1.0.2k-fips 26 Jan 2017’. See: https://github.com/urllib3/urllib3/issues/2168

三、解決方法

需要升級(jí)openssl

下載編譯openssl

wget --no-check-certificate   https://www.openssl.org/source/openssl-1.1.1t.tar.gz
tar -zxvf openssl-1.1.1t.tar.gz
cd openssl-1.1.1t/
./config --prefix=/usr/local/my_openssl
make
make install
tar -zxf ./my_openssl.tar.gz -C /usr/local
echo "copy my_openssl done"
sleep 1

mv /usr/bin/openssl /usr/bin/oldopenssl
ln -s /usr/local/my_openssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/my_openssl/lib/libssl.so.1.1 /usr/lib64/
ln -s /usr/local/my_openssl/lib/libcrypto.so.1.1  /usr/lib64/
echo "change openssl done"

升級(jí)openssl之后,依舊import urllib3 報(bào)錯(cuò)

如果你已經(jīng)確認(rèn)系統(tǒng)中的OpenSSL顯示為新版本,但Python仍然使用舊版本,可能是因?yàn)镻ython解釋器沒(méi)有正確鏈接到新版本的OpenSSL。

思路1: 重新編譯python

重新編譯Python是一種解決Python解釋器沒(méi)有正確鏈接到新版本OpenSSL的方法之一。這可以確保Python使用新版本的OpenSSL庫(kù)。

配置編譯選項(xiàng):打開(kāi)命令行終端,切換到Python源代碼的目錄,并運(yùn)行以下命令以配置編譯選項(xiàng):

./configure --with-openssl=/path/to/openssl

–with-ssl:表示使用了系統(tǒng)中已安裝的 OpenSSL 庫(kù)。
–with-openssl:表示使用了自帶的 OpenSSL 庫(kù)。

/path/to/openssl 替換為新版本OpenSSL庫(kù)的安裝路徑。此選項(xiàng)告訴Python編譯器在編譯過(guò)程中使用新版本的OpenSSL。

編譯和安裝:在命令行終端中運(yùn)行以下命令以編譯和安裝重新配置的Python:

make
sudo make install

這將編譯Python源代碼并將其安裝到系統(tǒng)中。注意,在執(zhí)行sudo make install時(shí),可能需要輸入管理員密碼。

驗(yàn)證安裝結(jié)果:重新編譯和安裝完成后,你可以通過(guò)運(yùn)行以下命令來(lái)驗(yàn)證Python解釋器是否鏈接到了新版本的OpenSSL:

python -c "import ssl; print(ssl.OPENSSL_VERSION)"

使用 --with-openssl 親測(cè)可用!推薦~

思路2: 指定Python解釋器鏈接到新版本的OpenSSL,而不重新編譯Python

如果你已經(jīng)安裝了新版本的OpenSSL,并且希望指定Python解釋器鏈接到該新版本的OpenSSL,而不重新編譯Python,可以通過(guò)設(shè)置環(huán)境變量LD_LIBRARY_PATH(Linux)或DYLD_LIBRARY_PATH(macOS),將新版本的OpenSSL庫(kù)路徑添加到Python解釋器的運(yùn)行環(huán)境中。

例如,假設(shè)新版本的OpenSSL庫(kù)位于 /usr/local/ssl/lib,你可以執(zhí)行以下操作:

export LD_LIBRARY_PATH=/usr/local/ssl/lib:$LD_LIBRARY_PATH

在Python交互環(huán)境中,執(zhí)行以下代碼來(lái)查看Python中使用的OpenSSL庫(kù)的路徑:

import ssl
print(ssl.OPENSSL_VERSION)
print(ssl._ssl.__file__)

我這邊測(cè)試,無(wú)論怎么改LD_LIBRARY_PATH,一直引用的python安裝目錄下的: lib/python3.8/lib-dynload/_ssl.cpython-38-x86_64-linux-gnu.so

四、python編譯和openssl的關(guān)系?每次openssl爆漏洞,我也需要編譯升級(jí)python么?

Python與OpenSSL之間存在緊密的關(guān)系。OpenSSL是一個(gè)開(kāi)源的密碼學(xué)庫(kù),提供了實(shí)現(xiàn)SSL/TLS協(xié)議和加密算法的功能。Python的SSL模塊則是構(gòu)建在OpenSSL庫(kù)之上的,它提供了對(duì)SSL/TLS協(xié)議的支持,使得Python程序能夠進(jìn)行安全的網(wǎng)絡(luò)通信、加密解密等操作。

通常情況下,只需要升級(jí)OpenSSL本身即可,Python的SSL模塊將自動(dòng)使用最新版本的OpenSSL庫(kù)。你無(wú)需重新編譯Python,只需確保你系統(tǒng)中已經(jīng)安裝了更新后的OpenSSL庫(kù),Python將自動(dòng)鏈接并使用該庫(kù)。

  1. Python的SSL模塊是通過(guò)調(diào)用操作系統(tǒng)提供的動(dòng)態(tài)鏈接庫(kù)(或共享庫(kù))來(lái)實(shí)現(xiàn)其功能的。這些動(dòng)態(tài)鏈接庫(kù)包含了SSL/TLS協(xié)議和加密算法的實(shí)現(xiàn)。在大多數(shù)操作系統(tǒng)中,OpenSSL庫(kù)被視為系統(tǒng)級(jí)庫(kù),因此Python的SSL模塊會(huì)默認(rèn)鏈接到操作系統(tǒng)中已安裝的OpenSSL庫(kù)。

  2. 當(dāng)你在系統(tǒng)中升級(jí)OpenSSL庫(kù)時(shí),通常會(huì)更新相應(yīng)的動(dòng)態(tài)鏈接庫(kù)文件。這意味著Python的SSL模塊可以自動(dòng)從已更新的動(dòng)態(tài)鏈接庫(kù)中加載最新版本的OpenSSL功能。

  3. Python的SSL模塊在運(yùn)行時(shí)會(huì)動(dòng)態(tài)加載所需的OpenSSL函數(shù)和符號(hào)。它會(huì)查找操作系統(tǒng)的動(dòng)態(tài)鏈接庫(kù)搜索路徑,以尋找和加載正確版本的OpenSSL庫(kù)。如果新版本的OpenSSL庫(kù)存在于系統(tǒng)的動(dòng)態(tài)庫(kù)搜索路徑中,Python的SSL模塊將自動(dòng)鏈接并使用該庫(kù)。

需要注意的是,上述自動(dòng)鏈接和使用最新版本的OpenSSL庫(kù)僅適用于使用操作系統(tǒng)提供的Python分發(fā)版本。如果你使用的是自行編譯的Python,那么在編譯和安裝Python時(shí)需要確保正確地鏈接到更新后的OpenSSL庫(kù)。

如果你使用的是源代碼包,可以通過(guò)在運(yùn)行./configure命令時(shí)傳遞–with-openssl參數(shù),并指定新版本的OpenSSL庫(kù)所在的路徑來(lái)配置Python的編譯選項(xiàng)。例如:

./configure --with-openssl=/path/to/new/openssl

通過(guò)設(shè)置 LD_LIBRARY_PATH 環(huán)境變量,你可以指定 OpenSSL 庫(kù)的搜索路徑,而無(wú)需重新編譯 Python。但這種方法僅對(duì)于運(yùn)行時(shí)鏈接到 OpenSSL 的應(yīng)用程序有效,如果 Python 在靜態(tài)鏈接時(shí)已經(jīng)鏈接到舊版本的 OpenSSL,那么這種方法可能無(wú)效。

如果 Python 是在靜態(tài)鏈接時(shí)與舊版本的 OpenSSL 相關(guān)聯(lián),那么僅通過(guò)設(shè)置 LD_LIBRARY_PATH 環(huán)境變量可能無(wú)法使 Python 使用新版本的 OpenSSL。

在靜態(tài)鏈接的情況下,編譯時(shí)會(huì)將 OpenSSL 的代碼和函數(shù)嵌入到生成的可執(zhí)行文件中,而不是在運(yùn)行時(shí)動(dòng)態(tài)加載。這意味著無(wú)論設(shè)置 LD_LIBRARY_PATH 環(huán)境變量如何,Python 仍然會(huì)使用已經(jīng)嵌入的舊版本 OpenSSL 的功能。

進(jìn)入 Python 安裝目錄,查找名為 libpython*.a 的文件。例如,對(duì)于 Python 3.8,文件名可能是 libpython3.8.a。

 find / -name libpython*.a

如果你找到了這個(gè)文件,那么 Python 是靜態(tài)鏈接到 OpenSSL 的。如果沒(méi)有找到該文件,那么 Python 是在運(yùn)行時(shí)動(dòng)態(tài)鏈接到 OpenSSL 的。

如果發(fā)現(xiàn) Python 是靜態(tài)鏈接到 OpenSSL 的,那么僅通過(guò)設(shè)置 LD_LIBRARY_PATH 環(huán)境變量可能無(wú)法使 Python 使用新版本的 OpenSSL。在這種情況下,你可能需要重新編譯 Python 并鏈接到新版本的 OpenSSL,以確保 Python 使用最新的 OpenSSL 功能。

五、python怎么決定是動(dòng)態(tài)還是靜態(tài)鏈接到openssl的?

在大多數(shù)情況下,Python 是通過(guò)動(dòng)態(tài)鏈接的方式與 OpenSSL 相關(guān)聯(lián)。這意味著 Python 在運(yùn)行時(shí)會(huì)從系統(tǒng)中加載所需的 OpenSSL 動(dòng)態(tài)庫(kù)。

但是,有一些特殊情況可能導(dǎo)致 Python 靜態(tài)鏈接到 OpenSSL:

自定義編譯:如果你使用自定義的編譯選項(xiàng)或手動(dòng)編譯 Python,可能會(huì)導(dǎo)致靜態(tài)鏈接到 OpenSSL。在這種情況下,你需要檢查編譯過(guò)程中的選項(xiàng),并確認(rèn)是否啟用了靜態(tài)鏈接。

檢查 Python 編譯過(guò)程中是否啟用了靜態(tài)鏈接的選項(xiàng)

進(jìn)入 Python 安裝目錄,通常是 /usr/local/或/usr/ 中的 bin 目錄,路徑類(lèi)似 /usr/local/bin/ 或 /usr/bin/

執(zhí)行以下命令來(lái)查看編譯選項(xiàng):

./python3-config --ldflags

這個(gè)命令將顯示編譯 Python 時(shí)使用的鏈接器標(biāo)志。

如果在輸出中看到了 -lssl 或 -lcrypto,則表示 Python 在編譯時(shí)啟用了 OpenSSL 鏈接。這意味著 Python 是通過(guò)動(dòng)態(tài)鏈接方式與 OpenSSL 關(guān)聯(lián),而不是靜態(tài)鏈接。

如果在輸出中看到了 -l:libssl.a 或 -l:libcrypto.a,則表示 Python 在編譯時(shí)啟用了靜態(tài)鏈接。這意味著 Python 是通過(guò)靜態(tài)鏈接方式與 OpenSSL 關(guān)聯(lián)。

確定Python到底使用了哪個(gè)OpenSSL庫(kù)

在Python交互環(huán)境中,執(zhí)行以下代碼來(lái)查看Python中使用的OpenSSL庫(kù)的路徑:

import ssl
print(ssl.OPENSSL_VERSION)
print(ssl._ssl.__file__)

這將打印出Python使用的OpenSSL版本以及實(shí)際加載的庫(kù)文件路徑。

系統(tǒng)中安裝了多個(gè)libssl庫(kù)版本。這可能導(dǎo)致Python解釋器無(wú)法正確鏈接到所需的libssl庫(kù)。

可以執(zhí)行以下命令來(lái)檢查libssl庫(kù)是否安裝:

 ldconfig -p | grep libssl

六、編譯python3.8 報(bào)錯(cuò):Python requires an OpenSSL 1.0.2 or 1.1 compatible libssl with X509_VERIFY_PARAM_set1_host()

編譯python3.8 報(bào)錯(cuò):Python requires an OpenSSL 1.0.2 or 1.1 compatible libssl with X509_VERIFY_PARAM_set1_host().
LibreSSL 2.6.4 and earlier do not provide the necessary APIs, https://github.com/libressl-portable/portable/issues/381

問(wèn)題分析:
我本地的openssl已經(jīng)更新了,但是還是報(bào)這個(gè)錯(cuò),甚至我使用python編譯選項(xiàng)指定我opensslssl的路徑也不行 --with-openssl=/usr/local/my_openssl/lib/

需要確認(rèn)安裝的OpenSSL是否在編譯時(shí)添加了enable-ssl3配置

./config enable-ssl3 shared --prefix=/usr/local/openssl
make
sudo make install

在編譯OpenSSL時(shí)添加enable-ssl3配置的原因是:

OpenSSL 1.1.0 版本之后,默認(rèn)禁用了SSLv3協(xié)議,只支持TLSv1.0及以上版本。但Python在構(gòu)建ssl模塊時(shí),仍然需要SSLv3的支持。所以在編譯OpenSSL時(shí)需要顯式添加enable-ssl3配置來(lái)啟用SSLv3協(xié)議。

如果不添加這個(gè)配置,編譯Python時(shí)會(huì)出現(xiàn)您遇到的錯(cuò)誤:

Could not build the ssl module! 
Python requires an OpenSSL 1.0.2 or 1.1 compatible libssl with X509_VERIFY_PARAM_set1_host().

這是因?yàn)镻ython試圖調(diào)用OpenSSL的X509_VERIFY_PARAM_set1_host()函數(shù),但這個(gè)函數(shù)是在OpenSSL 1.0.2版本引入的。而默認(rèn)編譯的OpenSSL 1.1.0及以上版本又禁用了SSLv3,所以Python無(wú)法構(gòu)建ssl模塊。

  1. 它會(huì)啟用SSLv3協(xié)議,這樣Python可以調(diào)用OpenSSL的SSLv3相關(guān)函數(shù)來(lái)構(gòu)建ssl模塊。
  2. 它會(huì)構(gòu)建OpenSSL的早期兼容版本,這樣Python可以調(diào)用像X509_VERIFY_PARAM_set1_host()這樣的函數(shù)。

注意 python編譯參數(shù)的 應(yīng)該使用--with-openssl=/usr/local/openssl來(lái)指定OpenSSL的主目錄, 而不是子目錄如lib。Python的configure腳本會(huì)在該路徑下自動(dòng)搜索include子目錄和lib子目錄。

親測(cè)通過(guò)!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-545837.html

到了這里,關(guān)于python報(bào)錯(cuò):ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+

    該錯(cuò)誤提示表示您的 OpenSSL 版本過(guò)低,無(wú)法兼容 urllib3 v2.0。 解決此問(wèn)題的方法是升級(jí)您的 OpenSSL 版本至 1.1.1 或以上。具體操作如下: 方法一: 檢查您的 OpenSSL 版本,使用以下命令: openssl version 如果您的 OpenSSL 版本低于 1.1.1,可以使用以下方式升級(jí): 安裝完畢后,再次運(yùn)

    2024年02月06日
    瀏覽(24)
  • Linux學(xué)習(xí)36- python3.9出現(xiàn)ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+

    python3.9上安裝requests 庫(kù),requests包引入了urllib3,而新版本v2.x的urllib3 需要OpenSSL 1.1.1+以上版本 所以就出現(xiàn)了報(bào)錯(cuò) 因?yàn)槲覀兺ㄟ^(guò)yum安裝的openssl-devel版本是1.0.2k 解決辦法有2種: 第一種是降級(jí)urllib3版本即可 這樣也就避免了版本沖突問(wèn)題 第二種辦法是升級(jí)OpenSSL 1.1.1+以上版本,此

    2024年02月03日
    瀏覽(19)
  • 報(bào)錯(cuò):ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+, currently the ‘ssl‘ module is compiled wi

    報(bào)錯(cuò):ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+, currently the ‘ssl‘ module is compiled wi

    報(bào)錯(cuò): ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+, currently the ‘ssl’ module is compiled with OpenSSL 1.1.0h 27 Mar 2018. 解決辦法 : Terminal窗口執(zhí)行:pip install urllib3==1.26.15 Urllib3是一個(gè)功能強(qiáng)大,用于HTTP客戶端的Python庫(kù),它包含4個(gè)模塊: 安裝命令: 安裝命令:pip install urllib3 urllib3發(fā)送

    2024年02月13日
    瀏覽(20)
  • ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+, currently the ‘ssl‘

    報(bào)錯(cuò): 解決辦法:將urllib3的版本降低 參考 python包報(bào)錯(cuò)ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+, currently the ‘ssl’ module is compiled with ‘OpenSSL 1.0.2k-fips 26 Jan 2017’

    2024年02月07日
    瀏覽(18)
  • 【Python爬蟲(chóng)】ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+, currently the ‘ssl‘ module is comp

    目錄 1.問(wèn)題描述: 2.問(wèn)題分析: 3.問(wèn)題解決: ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+, currently the \\\'ssl\\\' module is compiled with \\\'OpenSSL 1.0.2k-fips? 26 Jan 2017\\\'. See: https://github.com/urllib3/urllib3/issues/2168 提示 這個(gè)錯(cuò)誤表明 urllib3 版本 2.0 要求使用 OpenSSL 1.1.1 或更高版本,但當(dāng)前的 Python

    2024年02月05日
    瀏覽(24)
  • ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+, currently the ‘ssl‘ ...解決方法

    ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+, currently the \\\'ssl\\\' module is compiled with LibreSSL 2.8.3. See: https://github.com/urllib3/urllib3/issues/2168 大概意思就是說(shuō)urllib3版本過(guò)高 解決方法: 1、使用pip list查看urllib3?的版本 2、降低版本:pip install urllib3==1.26.15\\\"

    2024年04月26日
    瀏覽(27)
  • urllib3 v2.0 only supports OpenSSL 1.1.1+報(bào)錯(cuò)問(wèn)題

    該錯(cuò)誤提示表示您的 OpenSSL 版本過(guò)低,無(wú)法兼容 urllib3 v2.0。 解決此問(wèn)題的方法是升級(jí)您的 OpenSSL 版本至 1.1.1 或以上。具體操作如下: 檢查您的 OpenSSL 版本,使用以下命令: 如果您的 OpenSSL 版本低于 1.1.1,可以使用以下方式升級(jí): Ubuntu: CentOS: macOS: 安裝完畢后,再次運(yùn)

    2024年02月10日
    瀏覽(18)
  • 【已解決】 ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+, currently the ‘ssl‘ module is compiled

    【已解決】 ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+, currently the ‘ssl‘ module is compiled

    問(wèn)題描述 ??????? 今天和前幾次的環(huán)境不太一樣,python3.6,并基于此安裝相應(yīng)的torch和torchversion包。 ????????之所以這樣是因?yàn)檫@個(gè)項(xiàng)目比較早了,所以報(bào)錯(cuò)了這個(gè)內(nèi)容:RuntimeError: \\\"nll_loss_forward_reduce_cuda_kernel_2d_index\\\" not implemented for \\\'Float\\\',而且在經(jīng)歷多方查找并沒(méi)有找

    2024年02月05日
    瀏覽(27)
  • ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+, currently the ‘ssl‘ module is compiled with

    運(yùn)行python腳本時(shí)報(bào)如下錯(cuò)誤 解決方法: 參見(jiàn): 報(bào)錯(cuò):ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+, currently the ‘ssl‘ module is compiled wi_請(qǐng)叫漂亮的博客-CSDN博客

    2024年02月06日
    瀏覽(25)
  • 解決python urllib3 v2.0 only supports OpenSSL 1.1.1+, currently

    上面語(yǔ)句不能執(zhí)行的話嘗試下面這一條 還是不行嘗試 升級(jí)openssl

    2024年02月11日
    瀏覽(30)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包