python3 番外篇之苦No module named '_ssl'问题久矣
在CentOS7上编译安装Python 3.10.14。安装的很顺利,一点卡顿都没有,纵响般丝滑,但是就在我写好Python代码执行的时候,出现了如下报错:
[root@zabbix-server 文件上传示例]# streamlit run demo.py
Traceback (most recent call last):
File "/usr/local/python3/bin/streamlit", line 5, in <module>
from streamlit.web.cli import main
File "/usr/local/python3/lib/python3.10/site-packages/streamlit/web/cli.py", line 28, in <module>
import streamlit.web.bootstrap as bootstrap
File "/usr/local/python3/lib/python3.10/site-packages/streamlit/web/bootstrap.py", line 39, in <module>
from streamlit.web.server import Server, server_address_is_unix_socket, server_util
File "/usr/local/python3/lib/python3.10/site-packages/streamlit/web/server/__init__.py", line 15, in <module>
from streamlit.web.server.component_request_handler import ComponentRequestHandler
File "/usr/local/python3/lib/python3.10/site-packages/streamlit/web/server/component_request_handler.py", line 21, in <module>
import tornado.web
File "/usr/local/python3/lib/python3.10/site-packages/tornado/web.py", line 92, in <module>
from tornado.httpserver import HTTPServer
File "/usr/local/python3/lib/python3.10/site-packages/tornado/httpserver.py", line 29, in <module>
import ssl
File "/usr/local/python3/lib/python3.10/ssl.py", line 99, in <module>
import _ssl # if we can't import it, let the error propagate
ModuleNotFoundError: No module named '_ssl'
[root@zabbix-server ~]# python3
Python 3.10.14 (main, Mar 27 2024, 15:18:44) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import ssl
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/python3/lib/python3.10/ssl.py", line 99, in <module>
import _ssl # if we can't import it, let the error propagate
ModuleNotFoundError: No module named '_ssl'
>>>
当出现这个问题的时候,整个人都不好了,因为这已经不是我第一次遇到了,之前遇到都是直接降python版本到3.9。这次不准备降了。我升级了openssl,编译python3时也指定了--with-openssl。但是它就是不行。后来各种查资料发现了一篇官方文档:PEP 644 – Require OpenSSL 1.1.1 or newer | peps.python.org。大概意思就是python3.10以后就需要openssl1.1.1以上的版本支持,不再向下兼容,但是我的openssl就是1.1.1以上的,依然不行,终于找到了端倪,python3.10以后的版本OPENSSL不再是/usr/local/ssl 的默认路径,变成了/path/to/openssl/directory,而使用openssl3以上的版本的lib目录名也变成了lib64,这点要注意了。
那上面的问题怎么解决呢?就需要在编译安装Python3.10前,修改一下源码,给它指定一下你的openssl的安装目录如下图所示:
编辑vim /你自己的Python编译源文件路径/Modules/Setup。我自己的是“vim /root/Python-3.10.14/Modules/Setup”
上图中的操作都完成之后,删掉原来编译完成后的python文件目录,重新执行编译命令:
./configure --prefix=/usr/local/python3 --with-openssl=/root/openssl-1.1.1h --with-openssl-rpath=auto make make install
想知道openssl怎么升级的可以看我这篇文档:https://www.cnblogs.com/zhangzhide/p/17601323.html
分类:
python30天养成计划
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南