54

带有 Python 2.7 的 Ubuntu Maverick:

我不知道如何解决以下导入错误:

>>> import ssl
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/ssl.py", line 60, in <module>
   import _ssl             # if we can't import it, let the error propagate
ImportError: No module named _ssl

更新: 我重新编译了源代码。我无法弄清楚如何在下面提到的答案中添加 --with-ssl 选项,而是通过编辑 /Modules/Setup.dist 中有关 SSL 的行来实现这一点。

4

9 回答 9

64

与原始问题无关,但因为这是第一个谷歌结果......我在谷歌 AppEngine上点击了这个并不得不添加:

libraries:
- name: ssl
  version: latest

app.yaml每个:https ://cloud.google.com/appengine/docs/python/sockets/ssl_support

请注意:这似乎适用于 Python 版本 2.7.9,但不适用于 2.7.10 或 2.7.11。

于 2015-07-27T01:02:02.273 回答
29

你是从源代码构建 Python 的吗?如果是这样,您--with-ssl在构建时需要该选项。

于 2011-02-26T18:28:33.347 回答
18

由于 --with-ssl 不再被识别,我刚刚安装了libssl-dev. 对于基于 debian 的系统:

sudo apt-get install libssl-dev 

对于 CentOS 和 RHEL

sudo yum install openssl-devel

要重新启动 make 首先清理:

make clean

然后重新开始,依次执行以下命令:

./configure
make
make test
make install

有关 OpenSSL 的更多信息,请访问 OpenSSL 上的Ubuntu 帮助页面

于 2016-06-15T07:32:56.750 回答
14

如果您从源代码构建 Python,这只是依赖关系问题:由于您错过了安装的 OpenSSL 库,python 会默默地安装_ssl模块失败。您可以在make命令的最终报告中看到它:

Python build finished, but the necessary bits to build these modules were not found:
_bsddb             _sqlite3           _ssl
_tkinter           bsddb185           dbm
dl                 gdbm               imageop
sunaudiodev
To find the necessary bits, look in setup.py in detect_modules() for the module's name.

在任何标准库路径(/usr/lib/usr/local/lib...)中安装 OpenSSL 库应该可以解决问题。无论如何,这就是我所做的:-)

于 2013-10-29T12:31:21.340 回答
8

我有完全相同的问题。我在没有重建python的情况下修复了它,如下:

  1. 查找具有相同架构(i386 或 x86_64)和相同 python 版本(例如:2.7.5)的另一台服务器。是的,这是困难的部分。如果找不到任何具有相同 python 版本的服务器,您可以尝试将 python 从源安装到另一台服务器。

  2. 在这另一台服务器上,检查 import ssl 是否有效。它应该工作。

  3. 如果可行,请尝试按如下方式查找 _ssl 图书馆:

    [root@myserver]# find / -iname _ssl.so
    /usr/local/python27/lib/python2.7/lib-dynload/_ssl.so
    
  4. 将此文件复制到原始服务器中。使用相同的目标文件夹:/usr/local/python27/lib/python2.7/lib-dynload/

  5. 仔细检查所有者和权限

    [root@myserver]# chown root:root _ssl.so
    [root@myserver]# chmod 755 _ssl.so
    
  6. 现在您应该可以导入 ssl。

这在带有 python 2.7.3 的 CentOS 6.3 x86_64 环境中对我有用。我还安装了 python 2.6.6,但 ssl 工作正常。

于 2013-09-18T14:16:30.707 回答
3

下划线通常表示一个C模块(即DLL),Python找不到。你自己构建了python吗?如果是这样,您需要包括 SSL 支持。

于 2011-02-26T18:29:14.127 回答
1

我正在为那些仍然面临此类问题且无法找到解决方案的人编写此解决方案。

就我而言,我正在使用

共享主机(Cpanel Access)Linux CentOS。

我正面临这个问题

No module named '_ssl'

我尝试了所有可能的解决方案,但如您所知,有时事情对您不起作用,并且在托管您无权访问完全 root 和运行查询。甚至我的托管服务提供商也为我做了......但没有好的结果。

所以如果你使用共享主机并且你已经部署了你的 Django 应用程序,我是如何解决的

设置 Python 应用程序

你只需要降级你的 Python 版本,我从

Python 3.7.3

(因为 Python 3.7 中没有 SSL 模块)

Python 3.6.8

通过设置 Python 应用程序。

希望对遇到同样问题的人有所帮助

于 2019-11-02T22:33:49.853 回答
0

使用包管理器安装 python-ssl 的补充包或使用 -with-ssl 重新编译 Python(需要安装 OpenSSL 标头/库)。

于 2011-02-26T18:30:44.390 回答
0

在 Solaris 11 上,我必须修改 setup.py 以在 SSL 包含搜索路径中包含 /opt/csw/include/openssl。

乌韦

于 2015-07-16T14:35:35.783 回答