python報錯:ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+
問題分析
說明:requests包引入了urllib3,而新版本的urllib3 需要OpenSSL 1.1.1+以上版本,否則報錯:
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
三、解決方法
需要升級openssl
下載編譯openssl
1. 依賴包
安裝編譯 OpenSSL 所需的包,包括 gcc、make、perl 和 zlib-devel。可以通過運行以下命令完成:
yum install -y gcc make perl zlib-devel
2. 安裝包下載
下載 OpenSSL 1.1.1 的源碼包,可以從 OpenSSL 官網(wǎng)下載(https://www.openssl.org/source/openssl-1.1.1.tar.gz)或使用以下命令下載:
wget https://www.openssl.org/source/openssl-1.1.1.tar.gz
3. 解壓
解壓源碼包并進入解壓后的目錄:
tar -zxvf openssl-1.1.1.tar.gz
cd openssl-1.1.1
4.初始化并編譯、安裝
運行以下命令編譯 OpenSSL:
./config --prefix=/opt/openssl-1.1.1
make
make install
5. 添加環(huán)境變量
vim /etc/profile
export PATH=/opt/openssl-1.1.1/bin:$PATH
export LD_LIBRARY_PATH=/opt/openssl-1.1.1/lib:$LD_LIBRARY_PATH
source /etc/profile
這會在系統(tǒng)中安裝新的 OpenSSL 版本。可以通過運行以下命令檢查 OpenSSL 版本:
openssl version
如果輸出結(jié)果中的版本號為 1.1.1 或更高版本,則說明 OpenSSL 已成功升級。
6. 做軟連接
如果還是原來的版本,沒變成新版本,可以做軟連接使其掛用新版本
將原來的openssl,做備份
mv /usr/bin/openssl /usr/bin/openssl_20230525bak
mv /usr/lib64/openssl /usr/lib64/openssl_20230525bak
然后將新安裝的OpenSSL做軟連接到這個路徑
ln -s /opt/openssl-1.1.1/bin/openssl /usr/bin/openssl
再執(zhí)行以下命令檢查 OpenSSL 版本:
openssl version
完成!!
升級openssl之后,依舊import urllib3 報錯
如果你已經(jīng)確認系統(tǒng)中的OpenSSL顯示為新版本,但Python仍然使用舊版本,可能是因為Python解釋器沒有正確鏈接到新版本的OpenSSL。
思路1: 重新編譯python
重新編譯Python是一種解決Python解釋器沒有正確鏈接到新版本OpenSSL的方法之一。這可以確保Python使用新版本的OpenSSL庫。
配置編譯選項:打開命令行終端,切換到Python源代碼的目錄,并運行以下命令以配置編譯選項:
./configure --with-openssl=/path/to/openssl
–with-ssl:表示使用了系統(tǒng)中已安裝的 OpenSSL 庫。
–with-openssl:表示使用了自帶的 OpenSSL 庫。
將 /path/to/openssl 替換為新版本OpenSSL庫的安裝路徑。此選項告訴Python編譯器在編譯過程中使用新版本的OpenSSL。
編譯和安裝:在命令行終端中運行以下命令以編譯和安裝重新配置的Python:
make
make install
這將編譯Python源代碼并將其安裝到系統(tǒng)中。注意,在執(zhí)行sudo make install時,可能需要輸入管理員密碼。
驗證安裝結(jié)果:重新編譯和安裝完成后,你可以通過運行以下命令來驗證Python解釋器是否鏈接到了新版本的OpenSSL:
python -c "import ssl; print(ssl.OPENSSL_VERSION)"
使用 --with-openssl 親測可用!推薦~
思路2: 指定Python解釋器鏈接到新版本的OpenSSL,而不重新編譯Python
如果你已經(jīng)安裝了新版本的OpenSSL,并且希望指定Python解釋器鏈接到該新版本的OpenSSL,而不重新編譯Python,可以通過設(shè)置環(huán)境變量LD_LIBRARY_PATH(Linux)或DYLD_LIBRARY_PATH(macOS),將新版本的OpenSSL庫路徑添加到Python解釋器的運行環(huán)境中。
例如,假設(shè)新版本的OpenSSL庫位于 /usr/local/ssl/lib,你可以執(zhí)行以下操作:
export LD_LIBRARY_PATH=/usr/local/ssl/lib:$LD_LIBRARY_PATH
在Python交互環(huán)境中,執(zhí)行以下代碼來查看Python中使用的OpenSSL庫的路徑:文章來源:http://www.zghlxwxcb.cn/news/detail-707893.html
import ssl
print(ssl.OPENSSL_VERSION)
print(ssl._ssl.__file__)
我這邊測試,無論怎么改LD_LIBRARY_PATH,一直引用的python安裝目錄下的: lib/python3.8/lib-dynload/_ssl.cpython-38-x86_64-linux-gnu.so
?文章來源地址http://www.zghlxwxcb.cn/news/detail-707893.html
到了這里,關(guān)于python報錯:ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!