ImportError:没有名为_ssl的模块

J C*_*per 45 python python-2.7

Ubuntu Maverick w/Python 2.7:

我无法弄清楚如何解决以下导入错误:

>>> 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
Run Code Online (Sandbox Code Playgroud)

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

slu*_*pet 62

与原始问题无关,但因为这是Google的第一个结果......我在Google AppEngine上点击了这个并且必须添加:

libraries:
- name: ssl
  version: latest
Run Code Online (Sandbox Code Playgroud)

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

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


Utk*_*glu 27

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

  • 忽略其余的建议互联网,它已经过时了.扩展版本现在由setup.py控制.破解该文件,不要触摸Modules/Setup.dist或--with-ssl. (20认同)
  • 我试图安装Python 2.7并且`--with-ssl`似乎不再被识别...... (8认同)
  • 从源代码构建时不再需要`--with-ssl`,因为它默认会查找ssl.确保安装了`openssl-devel`或`libssl-dev`(名称取决于您的发行版)和/或破解`setup.py`文件为@ACyclic,以确保Python安装指向ssl头文件正确. (4认同)
  • 我不记得我是否从源码构建.我什么时候添加--with-ssl?./configure,make或make install步骤.当我把它添加到./configure它说--with-ssl选项无法识别 (2认同)
  • 这是一个“配置”选项。一般来说,配置选项、编译时开关等都是“配置”的选项——它实际上做的是在许多源文件上运行,进行文本替换(并且通常创建新的头文件),然后构建时间。 (2认同)

Emm*_*uel 12

如果你从源代码构建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.
Run Code Online (Sandbox Code Playgroud)

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


小智 8

我有完全相同的问题.我修复它而不重建python,如下所示:

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

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

3)如果有效,那么尝试按如下方式找到_ssl lilbrary:

[root@myserver]# find / -iname _ssl.so
/usr/local/python27/lib/python2.7/lib-dynload/_ssl.so
Run Code Online (Sandbox Code Playgroud)

4)将此文件复制到原始服务器.使用相同的目标文件夹:/usr/local/python27/lib/python2.7/lib-dynload/

5)仔细检查所有者和权限:

[root@myserver]# chown root:root _ssl.so
[root@myserver]# chmod 755 _ssl.so
Run Code Online (Sandbox Code Playgroud)

6)现在你应该能够导入ssl了.

这对我来说在CentOS 6.3 x86_64环境中使用python 2.7.3.我也安装了python 2.6.6,但ssl工作正常.

希望能帮助到你.


seb*_*now 8

由于--with-ssl不再被识别,我只是安装了libssl-dev:

sudo apt-get install libssl-dev 
Run Code Online (Sandbox Code Playgroud)

要重新启动make,请先通过以下方式清理:

make clean
Run Code Online (Sandbox Code Playgroud)

然后重新开始并一个接一个地执行以下命令:

./configure
make
make test
make install
Run Code Online (Sandbox Code Playgroud)

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

  • 如果您使用的是 CentOS,命令是:`sudo yum install openssl-devel` (2认同)