从哪里得到RAND_egd?

Where to get RAND_egd?

我正在 GAE 中测试一个应用程序。它在部署到 Google 的服务器时运行良好,但在本地它崩溃了,因为它 cannot import name RAND_egd。它发生的地方在 C:\Program Files(x86)Google\google_appengine\google\appengine\dist27\socket.py line 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

根据此 ,解决方案是注释掉导入,但那是在标准 socket.py 中。我从 Google 提供的文件中删除了 RAND_egd,现在它起作用了。

这个问题的正确解决方案是什么?在 socket.py 中总是不需要 RAND_egd 吗? Google 提供的 socket.py 与 Google 的网络服务器中的不一样吗?

你的解决方案没有问题。这是由于随 SDK 1.9.38 分发的 socket.py 中的一个错误。

Windows 不支持 RAND_egd 库。

有一个更优雅的解决方法,如果没有 Windows。

有条件地导入库

您必须对文件进行更改: C:\Program Files (x86)\Google\google_appengine\google\appengine\dist27\socket.py

然后您可以使用 Python 晚于 2.7.9 的 Windows App Engine SDK,

此处描述了所需的文件更改 https://code.google.com/p/googleappengine/issues/detail?id=12783

您需要管理员权限才能修改文件。在可写位置编辑文件然后将其复制到只读目标可能更容易。

检查此问题的状态。希望新版本的 SDK 意味着不再需要补丁。否则,在每次升级 App Engine SDK 后重复此过程。