python - 从哪里获得 RAND_egd?

标签 python google-app-engine ssl openssl

我正在 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

根据这个SO answer ,解决方案是注释掉导入,但那是在标准的 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

然后您可以将 2.7.9 之后的 Python 与 Windows App Engine SDK 一起使用,

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

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

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

关于python - 从哪里获得 RAND_egd?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35195175/

相关文章:

ssl - 邮件服务器上的 WHM/Cpanel SSL 证书

ssl - 如何在终端中使用 OpenSSL 将 .pem 文件转换为其他格式?

ruby - 使用 http 协议(protocol)访问启用了 SSL 的 Google Apps 提要

Python 设置属性等于另一个属性

python - unicode_literals 和 type()

php - 如何在 Google 云平台上部署我的 PHP 应用程序?

google-app-engine - 如何在 Google Developers Console 中设置成本限制

python - 在不覆盖现有键值对的情况下更新字典?

python - 套接字服务器 - 获取连接用户的 ip

python - 从 Compute Engine 与 App Engine 通信的安全方式