一、問題現象
1.1 執(zhí)行pip命令報錯
pip安裝時遇到openssl問題,沒辦法安裝第三方庫
“WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.?”
1.2?導入import? ssl 報錯
直接執(zhí)行python,進入python, 輸入import? ssl ,也會報相似的錯誤。?
正常情況下,是這樣的,導入成功無報錯
1.3 執(zhí)行python腳本報錯
二、問題原因
根據出錯信息提示分析:ssl
模塊不可用。
pip默認的安裝源https://pypi.org/simple/,采用的是 HTTPS協議,連接是需要SSL庫加密和解密。出錯信息顯示,你的Python沒有所需的ssl模塊。官網下載的Python
已經內建了ssl
模塊,應該不會出現這個問題。
2.1 openssl版本低
系統(tǒng)版本centos7.4,其中openssl的版本為OpenSSL?1.0.2k-fips,而python3.11需要的openssl的版本為1.1.x及以上,需要對openssl進行升級,并重新編譯python3.11(yum?安裝的openssl?版本都比較低)。現在有些高版本的linux,openssl已經是1.1.x版本以上,不會出現該opensll版本問題。
2.3 openssl配置問題
已經源碼編譯安裝了高版本的openssl,由于沒有配置軟鏈接、和openssl庫的位置,導致的問題。
三、解決方案?
3.1 版本低-做OpenSSL升級
3.1.1 直接yum安裝高版本的openssl?
yum install -y openssl openssl-libs openssl-devel openssl-static
#查看版本
openssl version
3.1.2 源碼安裝openssl升級(推薦)
wget https://www.openssl.org/source/old/1.1.1/openssl-1.1.1q.tar.gz
tar -zxvf openssl-1.1.1q.tar.gz
cd openssl-1.1.1q
./config --prefix=/usr/local/openssl
make -j8
make install
#設置軟連接到新版本openssl
ln -sf /usr/local/bin/openssl /usr/bin/openssl
ln -sf /usr/local/include/openssl /usr/include/openssl
#openssl庫位置配置
ln -sf /usr/local/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1
ln -sf /usr/local/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
echo "/usr/local/lib/" >> /etc/ld.so.conf
ldconfig -v
openssl version
openssl version -a
但是安裝好之后,還可能出現以下問題
openssl: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory?,這是由于openssl庫的位置不正確造成的。
解決方法:以root用戶下執(zhí)行:
ln?-s? ? /usr/local/lib64/libssl.so.1.1? ? ? ? ? /usr/lib64/libssl.so.1.1
ln?-s? ? /usr/local/lib64/libcrypto.so.1.1? ? /usr/lib64/libcrypto.so.1.1
?我本機安裝的情況:
3.2 配置問題-補充配置
#設置軟連接到新版本openssl
ln -sf /usr/local/bin/openssl /usr/bin/openssl
ln -sf /usr/local/include/openssl /usr/include/openssl
#openssl庫位置配置
ln -sf /usr/local/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1
ln -sf /usr/local/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
看到有的網上說做環(huán)境變量配置,但是?感覺做軟鏈接更清晰、簡單點。就不談環(huán)境變量配置了。
四、本人采取的方式(不推薦)
參考博主方法https://www.cnblogs.com/miyuanbiotech/p/12307875.html?,也能解決,
但是它是在編譯時,可以直接將ssl模塊編譯進去。如果在安裝其他版本的python到本機,不將openssl高版本編譯進去,還是不能用。 所以推薦使用上面(三、解決方案)的方法解決該問題。
現在有些高版本的linux,openssl已經是1.1.x版本以上,不會出現該opensll版本問題。
4.1 包下載和安裝路徑配置
wget -c https://www.python.org/ftp/python/3.8.1/Python-3.8.1.tgz
tar -xvf Python-3.8.1.tgz
cd Python-3.8.1
./configure --prefix=/my/path/python/
# 配置環(huán)境后先別急著編譯
4.2?Modules/Setup文件修改
SSL=/my/path/openssl #改為剛安裝的ssl路徑
_ssl _ssl.c \
-DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
-L$(SSL)/lib -lssl -lcrypto
4.3 編譯安裝
make && make install
此時如果直接make編譯,仍會報如下類似錯誤:./python: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory generate-posix-vars failed make: *** [pybuilddir.txt] Error 1?缺少庫文件,說明libssl.so.1.1這個庫沒有讀取到。解決方法:有的是以root身份添加軟鏈接。有的將openssl庫加入環(huán)境變量。這個博主選擇了后者。
#執(zhí)行該命令 添加環(huán)境變量
export LD_LIBRARY_PATH=/my/path/openssl-1.1/lib:$LD_LIBRARY_PATH
(此處說一個比較坑的事)
環(huán)境變量配置,雖然運行python、和python腳本都沒問題。但是做定時任務crontab?時,由于找不到openssl庫,任務跑不起來。害自己排錯好久,才找到這個原因。最后重新做了?openssl庫文件的軟連接。
ln?-sf?/usr/local/lib64/libssl.so.1.1?/usr/lib64/libssl.so.1.1
n?-sf?/usr/local/lib64/libcrypto.so.1.1?/usr/lib64/libcrypto.so.1.1
4.4 測試SSL模塊
?該現象說明問題解決了。文章來源:http://www.zghlxwxcb.cn/news/detail-832917.html
五、知識拓展
centos7系統(tǒng)默認安裝了python2.X,后續(xù)可能又安裝了python3.X版本,所以在控制臺輸入命令進行查看當前機器上安裝python情況。因為centos7部分模塊依賴于2.X,所以為了不引起某些麻煩,選擇不去卸載2.X,直接安裝3.X。文章來源地址http://www.zghlxwxcb.cn/news/detail-832917.html
# 查看2.x版本情況
python --version
或
python -V
# 查看3.x版本情況
python3 --version
python3 -V?和python
到了這里,關于【python】linux系統(tǒng)python報錯“ssl module in Python is not available”的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!