首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >来自Google App Engine的带有dev_appserver.py的"ImportError:没有名为_ssl的模块“

来自Google App Engine的带有dev_appserver.py的"ImportError:没有名为_ssl的模块“
EN

Stack Overflow用户
提问于 2013-04-24 21:10:11
回答 7查看 16.3K关注 0票数 24

背景

“在Python运行时中,我们已经添加了对Python SSL Library的支持,因此您现在可以打开到远程服务的安全连接,例如苹果的推送通知服务。”

此报价为taken from a recent post on the Google App Engine blog

实现

如果要使用原生python ssl,则必须使用应用程序的app.yaml文件中的库配置来启用它,在该文件中指定了库名称"ssl“。。。

这些说明通过Google App Engine documentation提供给开发人员。

已将以下行添加到app.yaml文件中:

libraries:
- name: ssl
  version: latest

这在很大程度上与通过Google App Engine文档提供的建议一致。

问题

我尝试在三种不同的配置下运行我的项目。两个工作正常,一个不工作。

工作..。

在我将我的应用程序上传到Google App Engine,并通过实时服务器运行我的项目后,一切工作正常。

工作..。

当我用manage.py runserver运行我的项目,并在我的PYTHONPATH中包含Google App Engine SKD时,一切都很好。

不能工作。

但是,当我使用dev_appserver.py运行我的项目时,我得到以下错误:

ImportError at /
No module named _ssl
Request Method: GET
Request URL:    http://localhost:8080/
Django Version: 1.4.3
Exception Type: ImportError
Exception Value:    
No module named _ssl
Exception Location: /usr/local/lib/google_appengine_1.7.7/google/appengine/tools/devappserver2/python/sandbox.py in load_module, line 856
Python Executable:  /home/rbose85/Code/venvs/appserver/bin/python
Python Version: 2.7.3
Python Path:    
['/home/rbose85/Code/product/site',
 '/usr/local/lib/google_appengine_1.7.7',
 '/usr/local/lib/google_appengine_1.7.7/lib/protorpc',
 '/usr/local/lib/google_appengine_1.7.7',
 '/usr/local/lib/google_appengine_1.7.7',
 '/usr/local/lib/google_appengine_1.7.7/lib/protorpc',
 '/usr/local/lib/google_appengine_1.7.7',
 '/usr/local/lib/google_appengine_1.7.7/lib/protorpc',
 '/home/rbose85/Code/venvs/appserver/lib/python2.7',
 '/home/rbose85/Code/venvs/appserver/lib/python2.7/lib-dynload',
 '/usr/lib/python2.7',
 '/usr/local/lib/google_appengine',
 u'/usr/local/lib/google_appengine_1.7.7/lib/django-1.4',
 u'/usr/local/lib/google_appengine_1.7.7/lib/ssl-2.7',
 u'/usr/local/lib/google_appengine_1.7.7/lib/webapp2-2.3',
 u'/usr/local/lib/google_appengine_1.7.7/lib/webob-1.1.1',
 u'/usr/local/lib/google_appengine_1.7.7/lib/yaml-3.10']
Server time:    Wed, 24 Apr 2013 11:23:49 +0000
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2013-04-25 22:02:22

您可以通过打开python shell并输入import ssl来测试本地系统上是否有可用的ssl。如果没有出现错误,那么问题出在其他地方,否则您的系统上没有安装相关的库。如果您使用的是Linux操作系统,请尝试使用sudo apt-get install openssl openssl-devel或您的操作系统的相关说明在本地安装它们。如果您使用的是windows,则这些是instructions

票数 -1
EN

Stack Overflow用户

发布于 2013-06-05 18:34:56

对于当前的GAE版本(至少是1.8.0到1.8.3),如果您希望能够在开发环境中调试SSL连接,则需要对gae沙箱进行一些调整:

  • 将"_ssl“和"_socket”键添加到Python框架的socket.py文件中的字典路径中。

要点:调整沙箱环境可能会导致功能在本地机器上工作,但在生产环境中不起作用(例如,GAE在生产环境中只支持出站套接字)。我将建议您在开发完应用程序的特定部分后恢复沙箱。

票数 46
EN

Stack Overflow用户

发布于 2014-06-06 01:48:39

jmg的解决方案是有效的,但您可以对相关模块进行修补,而不是更改sdk文件。

只需在项目设置的开始就放上类似这样的内容。

# Just taking flask as an example
app = Flask('myapp')

if environment == 'DEV':
    import sys

    from google.appengine.tools.devappserver2.python import sandbox
    sandbox._WHITE_LIST_C_MODULES += ['_ssl', '_socket']

    from lib import copy_of_stdlib_socket.py as patched_socket

    sys.modules['socket'] = patched_socket
    socket = patched_socket
票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16192916

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档