哪里可以获得RAND_egd?

时间:2016-02-04 07:40:19

标签: python google-app-engine ssl openssl

我正在测试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不一样吗?

1 个答案:

答案 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后重复此过程。