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

 

posted @ 2024-03-27 16:29  潇湘神剑  阅读(499)  评论(0编辑  收藏  举报