我正在测试GAE中的应用程序。它部署到谷歌的服务器时运行正常,但在本地它崩溃,因为它cannot import name RAND_egd
。它发生的地方是C:\ Program Files(x86)Google \ google_appengine \ google \ appengine \ dist27 \ socket.py第73行:
from _ssl import RAND_add, RAND_egd, RAND_status, SSL_ERROR_ZERO_RETURN, SSL_ERROR_WANT_READ, SSL_ERROR_WANT_WRITE, SSL_ERROR_WANT_X509_LOOKUP, SSL_ERROR_SYSCALL, SSL_ERROR_SSL, SSL_ERROR_WANT_CONNECT, SSL_ERROR_EOF, SSL_ERROR_INVALID_ERROR_CODE
根据此SO answer,解决方案是注释掉导入,但这是在标准socket.py
中。我从Google提供的文件中删除了RAND_egd
,现在它已经有效了。
这个问题的正确解决方案是什么?在socket.py中是否总是不需要RAND_egd? Google提供的socket.py与Google网络服务器中的socket.py不一样吗?
答案 0 :(得分:2)
您的解决方案没有任何问题。这是因为随SDK 1.9.38分发的socket.py中的一个错误。
Windows不支持RAND_egd库。
如果不是Windows,有一种更优雅的解决方法可以有条件地导入库。
您必须对文件进行更改: C:\ Program Files(x86)\ Google \ google_appengine \ google \ appengine \ dist27 \ socket.py
然后,您可以在Windows App Engine SDK
之后使用2.7.9之后的Python此处描述了对文件所需的更改 https://code.google.com/p/googleappengine/issues/detail?id=12783
您需要管理员权限才能修改该文件。在可写位置编辑文件然后将其复制到只读目标可能更容易。
检查此问题的状态。希望SDK的新版本意味着不再需要补丁。否则,请在每次升级App Engine SDK后重复此过程。