2011-02-26 30 views
26

Ubuntu的小牛瓦特/ Python 2.7版:导入错误:没有模块名为_ssl

我想不出做什么来解决下面的导入错误:

>>> 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 

UPDATE: 我重新编译来源。我无法弄清楚如何在下面提到的答案中添加--with-ssl选项,而是通过在/Modules/Setup.dist中编辑有关SSL的行来解决此问题。

+2

嗨...我面临同样的问题......你能指出你在Setup.dist中编辑了什么 – g4ur4v 2014-03-02 19:42:58

+0

一旦J Cooper没有分享他的解决方案,我找到了一个。 http://www.webtop.com.au/blog/compiling-python-with-ssl-support-fedora-10-2009020237 – 2015-05-22 12:06:08

+1

由于--with-ssl无法识别,我只是安装了libssl-dev: sudo apt-get install libssl-dev – SSchneid 2016-06-15 07:15:11

回答

15

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

+2

我不记得我是否从源码构建。何时添加--with-ssl? ./configure,make或make install步骤。当我将它添加到./configure时,它表示--with-ssl选项未被识别 – 2011-02-26 18:43:44

+0

这是'configure'选项。一般来说,配置选项,编译时间切换等都是“configure”的选项 - 它实际上做的是在许多源文件上运行,进行文本替换(并经常创建新的头文件),之前建立时间。 – jelford 2012-01-07 09:20:26

+6

我试图安装Python 2.7并且'--with-ssl'似乎不再被识别... – Emmanuel 2013-10-29 12:32:04

2

下划线通常表示C模块(即DLL),Python无法找到它。你自己建立了python吗?如果是这样,您需要包含SSL支持。

0

要么使用你的软件包管理器来安装python-ssl的补充包,要么使用-with-ssl(需要安装OpenSSL头文件/库)重新编译Python。

5

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

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

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

3)如果成功的话,尽量找到_ssl lilbrary如下:

[[email protected]]# find/-iname _ssl.so 
/usr/local/python27/lib/python2.7/lib-dynload/_ssl.so 

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

5)双检查所有者和权限

[[email protected]]# chown root:root _ssl.so 
[[email protected]]# chmod 755 _ssl.so 

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

这在python 2.7.3的CentOS 6.3 x86_64环境中适用于我。另外我安装了python 2.6.6,但ssl工作正常。

希望它有帮助。

+1

这确实解决了我的问题,使用linuxbrew python 2.7.10实际上,你并不需要找到另一台服务器。安装'linuxbrew',然后安装'pyenv'。使用'pyenv'构建相同的python版本并复制_ssl.so。我还需要从'〜/ .linuxbrew/Cellar/python/2.7.10/lib/python2.7/lib-dynload'目录中删除'_ssl_failed.so'。 – 2015-06-01 05:29:31

+1

查找非常繁重,也许尝试:先找到“locate ssl.so”或“找到_ssl.so”。 – danger89 2017-02-10 15:28:46

11

如果你是从源码构建Python的,这只是依赖关系的问题:因为你错过了安装OpenSSL lib,python默默无法安装模块。你可以看到它在的最后报告作出命令:

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. 

安装OpenSSL的LIB在任何标准库路径(/usr/lib/usr/local/lib ...)应该做的伎俩。无论如何,这是我做的:-)

+1

如果你安装了openssl-devel,然后重新配置并重新编译,它将在linux系统上工作。请记住重新编译或重新安装可能需要ssl(如龙卷风)的任何服务以获取ssl。 – MrBooks 2014-05-02 20:05:14

+1

在Ubuntu上我能够通过'sudo apt-get build-dep python3获得编译可选模块所需的依赖关系。4' – gengkev 2015-07-11 21:51:31

0

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

乌韦

31

无关原来的问题,而是因为这是第一个谷歌的结果......我打这个在谷歌的AppEngine,不得不补充:

libraries: 
- name: ssl 
    version: latest 

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

请注意:这似乎工作到Python版本2.7.9但不是2.7.10或2.7.11。

+1

作品,非常感谢。 – 2016-02-14 07:42:28

+0

我刚试过这个,它完全崩溃了我的应用程序,以至于已经评论出来了我得到一个新的错误,如果我把它留在我得到ImportError:无法导入名称RAND_egd – HenryM 2016-03-03 07:43:43

+1

我降级了我的Python版本2.7.11至2.7.9,现在它似乎正在工作 – HenryM 2016-03-03 09:46:45

4

由于--with-SSL无法识别了我刚刚安装了的libssl-dev的:

sudo apt-get install libssl-dev 

要重新开始make首先清理:

make clean 

然后再次启动并执行下面的命令一个接一个:

./configure 
make 
make test 
make install 

有关OpenSSL的更多信息请访问Ubuntu Help Page on OpenSSL

相关问题