python - 如何在 CentOs 中修复“Python 中的 ssl 模块不可用”
问题描述
在 GoDaddy VPS CentOs 7 上安装新的 Python 3.7.1。尝试 pip3 install virtualenv 或 python 3 -m pip install virtualenv 并获取:
pip 配置了需要 TLS/SSL 的位置,但是 Python 中的 ssl 模块不可用。
openssl-devel 已安装并且是最新的
这个问题已经被问过很多次了,但是我找到的解决方案并没有解决我的问题。谢谢你们!
我尝试了以下基于 CentO 和 Linux 的解决方案:
使用 pip3 安装软件包时“Python 中的 SSL 模块不可用” # 允许构建 python ssl 库 yum install openssl-devel # 下载任何python 版本的源 cd /usr/src wget https://www.python.org /ftp/python/3.7.1/Python-3.7.1.tar.xz tar xf Python-3.7.1.tar.xz cd Python-3.7.1
# Configure the build w/ your installed libraries
./configure
# Install into /usr/local/bin/python3.6, don't overwrite global python bin
make altinstall
尝试使用 Python 3.7.2 pip 安装包会导致 TSL/SSL 错误
使用 pip3 安装包时“Python 中的 SSL 模块不可用”
pip 配置了需要 TLS/SSL 的位置,但是 Python 中的 ssl 模块不可用
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
“Python 中的 ssl 模块不可用” 并且 pip 无法确认 SSL 证书:SSL 模块不可用
`uncommented suggestions for CentOs
make install failed:
gcc -pthread -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -std=c99 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Werror=implicit-function-declaration -I. -I./Include -DUSE_SSL -I/include -I/include/openssl -c ./Modules/_ssl.c -o Modules/_ssl.o
./Modules/_ssl.c:74:6: error: #error "libssl is too old and does not support X509_VERIFY_PARAM_set1_host()"
./Modules/_ssl.c: In function ‘_ssl_configure_hostname’:
./Modules/_ssl.c:861: error: implicit declaration of function ‘SSL_get0_param’
./Modules/_ssl.c:861: warning: initialization makes pointer from integer without a cast
./Modules/_ssl.c:863: error: implicit declaration of function ‘X509_VERIFY_PARAM_set1_host’
./Modules/_ssl.c:869: error: implicit declaration of function ‘X509_VERIFY_PARAM_set1_ip’
./Modules/_ssl.c: In function ‘_ssl__SSLContext_impl’:
./Modules/_ssl.c:2988: error: ‘X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS’ undeclared (first use in this function)
./Modules/_ssl.c:2988: error: (Each undeclared identifier is reported only once
./Modules/_ssl.c:2988: error: for each function it appears in.)
./Modules/_ssl.c:3093: error: implicit declaration of function ‘SSL_CTX_get0_param’
./Modules/_ssl.c:3093: warning: assignment makes pointer from integer without a cast
./Modules/_ssl.c:3099: error: implicit declaration of function ‘X509_VERIFY_PARAM_set_hostflags’
./Modules/_ssl.c: In function ‘get_verify_flags’:
./Modules/_ssl.c:3397: warning: assignment makes pointer from integer without a cast
./Modules/_ssl.c: In function ‘set_verify_flags’:
./Modules/_ssl.c:3410: warning: assignment makes pointer from integer without a cast
./Modules/_ssl.c: In function ‘set_host_flags’:
./Modules/_ssl.c:3573: warning: assignment makes pointer from integer without a cast
make: *** [Modules/_ssl.o] Error 1`
https://www.tomordonez.com/pip-install-ssl-module-python-is-not-available.html
解决方案
这是 Python 3.7.9 和 CentOS 7.8.2003 的有效解决方案:
su - root
yum install gcc openssl-devel bzip2-devel libffi-devel zlib-devel -y
cd /usr/src
wget https://www.python.org/ftp/python/3.7.9/Python-3.7.9.tgz
tar xzf Python-3.7.9.tgz
cd Python-3.7.9
在/usr/src/Python-3.7.9/Modules/Setup.dist
中,取消注释这 4 行:
SSL=/usr/local/ssl
_ssl _ssl.c \
-DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
-L$(SSL)/lib -lssl -lcrypto
最后:
./configure --enable-optimizations
make altinstall
推荐阅读
- php - 让 php 代码每隔几秒运行一次
- python - Django ORM,GROUP BY + MAX()
- java - com.itextpdf.text.exceptions.BadPasswordException:用户密码错误
- objective-c - 在 Mac OS X 中获取“全局”文本输入坐标
- java - 如果我使用子类型和泛型,则无法使用 Jackson 解析 Json
- docker - 找不到满足cupshelpers==1.0 要求的版本
- typescript - 如何接受一个类型参数,它只是一个带有返回 Promises 的方法的接口,拒绝没有返回 Promises 的接口?
- r - 在 R 中:找出向量中的乱序(非升序)元素并进行插值
- assembly - 如何直接从 32 位切换到 PAE 分页?
- aframe - A-Frame Web AR自拍相机“试戴眼镜”交换模型