[Linux] CentOS7 中 pip3 install 可能出现的 ssl 问题


由于解决问题之后, 才写的博客, 所以没有图片记录.

尽量描述清楚一些

今天写代码的时候, 突然发现 文件里用了#define定义宏之后, coc.nvimcoc-clangd补全就用不了

:checkhealth了一下, 发现nvim忘记支持python3

尝试pip3 install neovim的时候, 发现会警告然后安装失败.

截图就没有了, 警告第一句大概是:

WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.

大概的意思是Python安装没有编译支持 SSL/TLS 加密的模块, 如果没有 SSL/TLS 支持, 就可能无法安装某些需要安全连接的Python

然后, 就开始踩坑了

踩坑

先尝试重新编译安装python3:

shell 复制代码
# 没有解决问题, 不要尝试
# 去到python源码路径下 
make clean
./configure --prefix=/usr/local/python3 --with-ssl
make
make install

然后make编译出问题:

Could not build the ssl module!

Python requires an OpenSSL 1.0.2 or 1.1 compatible libssl with X509_VERIFY_PARAM_set1_host().

LibreSSL 2.6.4 and earlier do not provide the necessary APIs

出现这个的原因是, CentOS7执行sudo yum install openssl-devel安装的openssl版本是1.0.2太老了


然后我又去下载了openssl1.1.1的源码 并且按照官网文档进行了编译安装.

shell 复制代码
# 官方文档安装步骤
wget https://www.openssl.org/source/openssl-1.1.1g.tar.gz
tar zxvf openssl-1.1.1g.tar.gz
cd openssl-1.1.1g
./config --prefix=/usr/local/openssl1.1.1 --openssldir=/usr/local/openssl1.1.1 no-ssl2
make
make install

# 安装完成之后, 还按照官方文档 添加了环境变量
export PATH=/usr/local/openssl1.1.1/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/openssl1.1.1/lib
export LC_ALL="en_US.UTF-8"
export LDFLAGS="-L /usr/local/openssl1.1.1/lib -Wl,-rpath,/usr/local/openssl1.1.1/lib"

然后, 重启了服务器, 执行openssl version会显示OpenSSL 1.1.1g 21 Apr 2020

再次去尝试编译安装python3:

shell 复制代码
# 没有解决问题, 不要尝试
# 去到python源码路径下 
make clean
./configure --prefix=/usr/local/python3 --with-ssl=/usr/local/openssl-1.1.1
make
make install

然而, 并没有解决问题.

make还是会出现相同的问题:

Could not build the ssl module!

``Python requires an OpenSSL 1.0.2 or 1.1 compatible libssl with X509_VERIFY_PARAM_set1_host().`

LibreSSL 2.6.4 and earlier do not provide the necessary APIs

但是, 明明已经安装了openssl1.1.1而且也指定了openssl1.1.1的库和软件

也把makefile里所有的/usr/local/openssl改成了/usr/local/openssl1.1.1

但还是没用.

解决

因为补全很重要, 所以一直在找怎么解决

终于, 在这篇提问中找到了解决方案:

https://stackoverflow.com/questions/60536472/building-python-and-openssl-from-source-but-ssl-module-fails

提问的某楼中提到, CentOS7可以直接用yum安装openssl1.1.1:

shell 复制代码
sudo yum install openssl11 openssl11-devel
mkdir /usr/local/openssl11
cd /usr/local/openssl11
ln -s /usr/lib64/openssl11 lib
ln -s /usr/include/openssl11 include

可以直接安装openssl1.1.1, 并将相应的库和包含 软连接到了 /usr/local/openssl11/lib/usr/local/openssl11/include

然后我再次 尝试重新编译安装python3:

shell 复制代码
# 去到python源码路径下 
make clean
./configure --prefix=/usr/local/python3 --with-ssl=/usr/local/openssl11
make

这一次make没有再报ssl相关错误:

然后make installpython3安装

安装成功之后, 进行软连接:

shell 复制代码
# 备份 python 和 pip
mv /usr/bin/python /usr/bin/python.bak
mv /usr/bin/python3 /usr/bin/python3.bak
mv /usr/bin/pip3 /usr/bin/pip3.bak
# 建立软连接
ln -s /usr/local/python3/bin/python3 /usr/bin/python
ln -s /usr/local/python3/bin/python3 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3

然后 尝试执行pip3 install neovim:

没有再报 WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available. 警告.

然后打开neovim执行:checkhealth

可以看到, python3成功被支持, coc.nvim也没有配置错误:

问题解决~

感谢阅读~

相关推荐
啊阿狸不会拉杆7 小时前
《机器学习导论》第 5 章-多元方法
人工智能·python·算法·机器学习·numpy·matplotlib·多元方法
17(无规则自律)7 小时前
深入浅出 Linux 内核模块,写一个内核版的 Hello World
linux·arm开发·嵌入式硬件
liu****7 小时前
2.深入浅出理解虚拟化与容器化(含Docker实操全解析)
运维·c++·docker·容器·虚拟化技术
wangsir.7 小时前
测试之自动化测试常用函数
python·测试
中二病码农不会遇见C++学姐7 小时前
Linux下的.run文件
linux
予枫的编程笔记7 小时前
【Linux入门篇】摆脱权限混乱困境:Linux用户组管理+sudo提权,一步到位
linux·linux运维·后端开发·linux用户管理·linux权限配置·chmod命令·sudo配置
铁蛋AI编程实战7 小时前
MemoryLake 实战:构建超长对话 AI 助手的完整代码教程
人工智能·python·microsoft·机器学习
清水白石0087 小时前
《为什么说 deque 是 Python 滑动窗口的“隐藏神器”?深入解析双端队列的高效之道》
开发语言·python
一个人旅程~7 小时前
Dell n4020双系统分区步骤和linux优化操作
linux·windows·电脑
池央7 小时前
CANN 诊断工具链深度解析:oam-tools 的自动化故障信息收集、软硬件状态快照与 AI Core 错误溯源机制
运维·人工智能·自动化