問題:運(yùn)行一個(gè)軟件提示openssl版本過低。報(bào)錯(cuò):“ImportError: urllib3 v2 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”
嘗試解決1:通過ChatGPT提問獲得解決辦法
既然你使用的是 CentOS 系統(tǒng),我們將重點(diǎn)討論在這個(gè)環(huán)境下如何解決 ImportError: urllib3 v2 only supports OpenSSL 1.1.1+
的問題。
請按照以下步驟操作:
-
檢查當(dāng)前 OpenSSL 版本:
打開終端,并輸入以下命令來檢查當(dāng)前系統(tǒng)上的 OpenSSL 版本:openssl version
如果你的版本是 OpenSSL 1.1.1 或更新版本,那么問題可能在其他地方。如果版本是 1.0.2 或更低,你需要繼續(xù)更新它。
-
升級 OpenSSL 版本:
對于 CentOS 7,比較簡單的方法是啟用 EPEL (Extra Packages for Enterprise Linux) 倉庫,然后安裝 OpenSSL 1.1.1。以下是相關(guān)命令:sudo yum install epel-release sudo yum update sudo yum install openssl11
對于 CentOS 8,EPEL 倉庫應(yīng)該默認(rèn)包含 OpenSSL 1.1.1。運(yùn)行
sudo yum update
應(yīng)該會(huì)安裝更新。 -
確認(rèn) Python 使用的 OpenSSL 版本:
更新 OpenSSL 后,確保 Python 正確鏈接了新版本的 OpenSSL。如果沒有,可能需要重新編譯 Python,這樣才能使用更新的庫。若要驗(yàn)證 Python 正確使用新的 OpenSSL 版本,你可以在 Python 環(huán)境中執(zhí)行以下命令:
import ssl print(ssl.OPENSSL_VERSION)
加入你這么做了,而輸出的版本仍舊不是 1.1.1 或以上,這意味著你可能需要重新編譯 Python 來鏈接到更新的 OpenSSL 版本。
-
重新編譯 Python(如果必要):
如果 Python 使用的仍是舊版 OpenSSL,你可能需要重新編譯 Python。確保在編譯 Python 之前已經(jīng)安裝了新版本的 OpenSSL。根據(jù)你使用的 Python 版本,下載相應(yīng)的源代碼并重新編譯安裝。例如:sudo yum install gcc zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel tk-devel libffi-devel wget https://www.python.org/ftp/python/3.x.x/Python-3.x.x.tgz tar xzf Python-3.x.x.tgz cd Python-3.x.x ./configure --with-openssl=/usr/local/ssl --enable-optimizations make altinstall
替換
3.x.x
為具體的 Python 版本號(hào),并檢查--with-openssl
參數(shù)指向的路徑是否為新版 OpenSSL 的安裝路徑。
請注意,在對系統(tǒng)進(jìn)行重大更改之前,應(yīng)仔細(xì)檢查要進(jìn)行的操作,并在可能的情況下,在測試環(huán)境中驗(yàn)證更改。如果涉及重要服務(wù),請確保備份所有必要的數(shù)據(jù)。
由于我無法直接訪問你的系統(tǒng),你需要在系統(tǒng)上執(zhí)行上述步驟。如果你在執(zhí)行這些步驟時(shí)需要幫助,請隨時(shí)詢問。
解決結(jié)果:查看系統(tǒng)openssl
但是Python檢測ssl版本
嘗試卸載重裝openssl,python導(dǎo)入的ssl版本還是不變。
最后成功解決辦法:重新編譯Python。
在Python中編譯時(shí)確保找到正確版本的OpenSSL庫涉及以下步驟:
-
安裝OpenSSL庫:
確保在系統(tǒng)中安裝了所需版本的OpenSSL庫。可以使用系統(tǒng)包管理器(如apt
、yum
、brew
等)或從源代碼編譯安裝。 -
設(shè)置環(huán)境變量:
編譯Python之前,需要設(shè)置環(huán)境變量來指示編譯器和鏈接器OpenSSL庫的位置,特別是LD_LIBRARY_PATH
(Linux)、DYLD_LIBRARY_PATH
(Mac)以及CFLAGS
和LDFLAGS
用于指明頭文件和庫文件的路徑。export LDFLAGS="-L/path/to/openssl/lib" export CFLAGS="-I/path/to/openssl/include" export LD_LIBRARY_PATH="/path/to/openssl/lib:$LD_LIBRARY_PATH"
注意用實(shí)際OpenSSL庫安裝位置替換
/path/to/openssl
。 -
使用
configure
腳本:
當(dāng)編譯Python源代碼時(shí),使用configure
腳本并傳入正確的參數(shù)來令它識(shí)別OpenSSL的路徑。./configure --with-openssl=/path/to/openssl make make test # optional, to run tests sudo make install # or `make altinstall` to avoid replacing the default python binary
-
驗(yàn)證:
編譯并安裝Python后,驗(yàn)證是否正確使用了指定的OpenSSL。import ssl print(ssl.OPENSSL_VERSION)
請注意,指定的路徑應(yīng)該指向OpenSSL庫的安裝目錄,該路徑應(yīng)該包含庫文件(.so
、.dylib
或.dll
)和頭文件(通常在include
目錄下)。
如果以上不起作用,考慮以下額外的步驟和注意事項(xiàng):
- 確保沒有版本沖突,檢查系統(tǒng)中是否有多個(gè)OpenSSL版本,并確保
PATH
環(huán)境變量首先指向正確版本的bin
目錄。 - 檢查Python編譯日志來確認(rèn)編譯過程中使用的是正確的OpenSSL路徑。
- 在某些系統(tǒng)上,如果編譯器和鏈接器不遵循
LD_LIBRARY_PATH
,你可能需要調(diào)整/etc/ld.so.conf
文件或運(yùn)行ldconfig
。
最后,操作系統(tǒng)、編譯器和鏈接器可能會(huì)有不同的配置方法,所以請參考具體系統(tǒng)和工具的文檔以獲取最準(zhǔn)確的信息。
我的環(huán)境變量是:
export LDFLAGS=“-L/usr/local/lib”
export CFLAGS=“-I/usr/local/include”
export LD_LIBRARY_PATH=“/usr/local/lib:$LD_LIBRARY_PATH”文章來源:http://www.zghlxwxcb.cn/news/detail-795600.html
export LIBRARY_PATH=“/usr/local/lib:$LIBRARY_PATH”
配置環(huán)境變量的方法自行百度。文章來源地址http://www.zghlxwxcb.cn/news/detail-795600.html
到了這里,關(guān)于CentOS系統(tǒng)下升級Python的openssl過程記錄的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!