0

我正在尝试在 Google App Engine for Python 中将 boto3 用于 Polly API。到目前为止,我已经在我的 lib 子目录中安装了 boto3

pip install -t lib boto3

当我运行独立脚本时,它运行良好但是当我在我的 DEV 服务器上的应用程序中执行 boto3.client(...) 时,我收到来自 botocore/session.py 的错误:

from _winreg import OpenKeyEx, QueryValueEx, CloseKey, HKEY_LOCAL_MACHINE
ImportError: No module named _winreg

我已经看到,因为 GAE 是沙盒的,所以 _winreg 模块不可用是正常的

有没有人有在 GAE 上安装 boto3 并在 DEV 和 PROD 服务器上运行的经验?

或者还有其他使用 Polly API 的方法吗?

正如@simon-pierre 回答的那样,可以通过编辑 config_appengine.py 并添加以下内容来解决 _winreg 错误:

import sys
sys.plateform='linux3'

但后来我遇到了另一个问题

Python NameError:未定义全局名称“ssl”。要解决这个问题,您必须编辑 app.yaml 并通过以下方式启用 ssl:

libraries:
- name: ssl
  version: 2.7.11

然后出现另一个特定于 Windows 上的 GAE 的问题:from _ssl import RAND_egd 产生 ImportError: cannot import name RAND_egd。在 sochet.py 中

下面描述的socket.py的修改可以解决它: https ://code.google.com/p/googleappengine/issues/detail?id=12783

然后是一个我现在还没有找到解决办法的终极问题:

在 DEV 服务器上,AWS 回答: ConnectionError: ('Connection aborted.', error(13, 'Permission denied')) 从 DEV GAE 调用时我的呼叫 client.describe_voices('en-US') 但不是在同一脚本时称为独立。

我找到了对 PayPal SDK 和 PayPal 解决方案的此类问题的参考,但有没有人有 AWS boto3 的解决方案

https://github.com/paypal/PayPal-Python-SDK/issues/66

任何想法?

4

1 回答 1

2

解决方法:在您的appengine_config.py文件中,更改sys.platform值:

import sys
sys.platform = 'linux3'

问题是 App Engine 开发环境被沙盒化并阻止了_winreg模块的使用。(来源:https ://stackoverflow.com/a/28653565/902751 )

根据App Engine Google Group 的评论

在 Python 版本 >= 2.7.4 的情况下,由于 App Engine SDK >= 1.9.34,sys.platform 在 Windows 的 dev_appserver sanbox 环境中未明确设置为“linux3”。[...] 不幸的是,sys.platform = 'linux3' 的原始 sandbox.py 代码是为了与旧系统兼容而存在的。

于 2017-01-22T17:25:11.593 回答