CentOS7.9 python3 Can‘t connect to Https URL Because the SSL module is not available(已解决)

CentOS7.9 python3 Can‘t connect to Https URL Because the SSL module is not available(已解决)

2024-12-29 / 0 评论 / 42 阅读 / 正在检测是否收录...

CentOS7.9 python3 Can‘t connect to Https URL Because the SSL module is not available(已解决)

问题概览
CentOS7.9编译安装Python3.10运行python脚本的时候报Can‘t connect to Https URL Because the SSL module is not available.
当然,这个问题和python3 -c "import ssl" 报错是同一个问题

经排查发现是系统openssl版本过低导致的。
python3.10依赖的ssl 1.1.1以上的版本。

OK,发现问题之后,已经查明的原因,解决起来就容易多了。
我们重新编译安装Openssl,升级系统的openssl版本到1.1.1以上即可解决。
这里我们升级至 1.1.1w(openssl官网有更新的3.x ssl版本,但是我们服务器是centos7属于比较旧的版本,对 ssl 3.x兼容性有问题,所以先不用3.x的)

编译安装Openssl

#安装前先检查Openssl的版本
openssl version 
#OpenSSL 1.0.2k-fips  26 Jan 2017
yum install perl-core zlib-devel -y
cd /usr/local/src
wget -S “https://github.com/openssl/openssl/releases/download/OpenSSL_1_1_1w/openssl-1.1.1w.tar.gz”
tar -zxvf openssl-1.1.1w.tar.gz
cd openssl-1.1.1w
./config --prefix=/usr/local/openssl
make && make install
mv /usr/bin/openssl  /usr/bin/openssl.bak
mv /usr/include/openssl /usr/include/openssl.bak
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/openssl/include/openssl /usr/local/openssl
echo "/usr/local/openssl/lib" > /etc/ld.so.conf.d/openss111w.conf
#然后再次检查openssl版本
openssl version 
#OpenSSL 1.1.1w  11 Sep 2023 (Library: OpenSSL 1.1.1k  FIPS 25 Mar 2021)

#openssl的目录路径
openssl version -d
》》 OPENSSLDIR: "/usr/local/openssl/ssl"

openssl升级完成

编译安装python12

yum install libffi-devel.x86_64 libdb-devel uuid-devel.x86_64 tk-devel.x86_64 zlib-static.x86_64 zlib-devel -y
cd /usr/local/src/
wget https://www.python.org/ftp/python/3.12.6/Python-3.12.6.tgz
tar -zxvf Python-3.12.6.tgz  
cd  Python-3.12.6

openssl version -d #这个命令找到openssl根目录
》》 OPENSSLDIR: "/usr/local/openssl/ssl"  --with-openssl=参数填写这个路径

cd /usr/local/src/ 
cd  Python-3.12.6
cat >>  Modules/Setup<<EOF
SSL="/usr/local/openssl"

_ssl _ssl.c \

    -DUSE_SSL -I"\$(SSL)"/include -I"\$(SSL)"/include/openssl \

    -L"\$(SSL)"/lib -lssl -lcrypto

EOF

./configure --prefix=/usr/local/python3.12 --with-openssl=/usr/local/openssl/ssl  && make && make install

测试

/usr/local/python3.12 -r "import ssl"
#不报错,则说明模块引入成功

Python虚拟环境

[root@centos-12 opt]# mkdir -p /var/www
[root@centos-12 opt]# cd /var/www/
[root@centos-12 www]# ls
[root@centos-12 www]# python3 -m venv myenv
[root@centos-12 www]# ls
myenv
[root@centos-12 www]# source myenv/bin/activate
(myenv) [root@centos-12 www]#
(myenv) [root@centos-12 www]# python
Python 3.12.8 (main, Dec 30 2024, 13:22:30) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import ssl
>>>    
(myenv) [root@centos-12 www]# deactivate 
[root@centos-12 www]# 
[root@centos-12 www]# python
Python 2.7.5 (default, Nov 14 2023, 16:14:06) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 

python虚拟环境总结

python3 -m venv myenv  ## 使用Python venv模块创建了 名为myenv,当前目录下会生成一个myvenv目录
source myenv/bin/activate ## 激活进入 myenv虚拟环境
deactivate  ## 退出虚拟环境
/var/www/myenv/bin/python3   ## 使用绝对路径直接引用Python虚拟环境
 /var/www/myenv/bin/pip ## 使用绝对环境直接引用 虚拟环境中的pip
0

评论 (0)

取消