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)