背景
“在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
发布于 2013-04-25 22:02:22
您可以通过打开python shell并输入import ssl
来测试本地系统上是否有可用的ssl。如果没有出现错误,那么问题出在其他地方,否则您的系统上没有安装相关的库。如果您使用的是Linux操作系统,请尝试使用sudo apt-get install openssl openssl-devel
或您的操作系统的相关说明在本地安装它们。如果您使用的是windows,则这些是instructions。
发布于 2013-06-05 18:34:56
对于当前的GAE版本(至少是1.8.0到1.8.3),如果您希望能够在开发环境中调试SSL连接,则需要对gae沙箱进行一些调整:
要点:调整沙箱环境可能会导致功能在本地机器上工作,但在生产环境中不起作用(例如,GAE在生产环境中只支持出站套接字)。我将建议您在开发完应用程序的特定部分后恢复沙箱。
发布于 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
https://stackoverflow.com/questions/16192916
复制相似问题