Используйте boto3 на GAE для Python

Я пытаюсь использовать boto3 для Polly API в Google App Engine для Python. До сих пор я установил boto3 в моем подкаталоге lib

pip install -t lib boto3

Когда я запускаю автономный скрипт, он работает хорошо. Но когда я выполняю boto3.client(...) в своем приложении на моем сервере DEV, я получаю сообщение об ошибке из файла botocore/session.py:

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

Я видел, что, поскольку GAE находится в "песочнице", это нормально, что модуль _winreg недоступен

У кого-нибудь есть опыт установки boto3 на GAE и запуск его на сервере DEV и PROD?

Или есть другой способ использовать Polly API?

В ответе @simon-pierre ниже ошибка _winreg может быть решена путем редактирования config_appengine.py и добавления:

import sys
sys.plateform='linux3'

Но тогда я столкнулся с другой проблемой

Python NameError: глобальное имя 'ssl' не определено. Чтобы решить эту проблему, вы должны отредактировать app.yaml и включить ssl через:

libraries:
- name: ssl
  version: 2.7.11

И затем возникает другая проблема, которая характерна для GAE в Windows: из _ssl import RAND_egd создает ошибку ImportError: невозможно импортировать имя RAND_egd. В соц.пы

Описанная ниже модификация socket.py может решить эту проблему: https://code.google.com/p/googleappengine/issues/detail?id=12783

И тут возникает проблема, которую я пока не нашел:

На сервере DEV AWS отвечает: ConnectionError: ("Соединение прервано", ошибка (13, "Отказано в доступе")) на мой вызов client.describe_voices("en-US") при вызове из DEV GAE, но не при том же сценарии называется автономным.

Я нашел ссылку на проблему такого рода с PayPal SDK и решение для PayPal, но есть ли у кого-нибудь решение для AWS boto3

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

Любая идея?

1 ответ

Решение

Обходной путь: в вашем файле appengine_config.py измените sys.platform значение:

import sys
sys.platform = 'linux3'

Проблема заключается в том, что среда разработки App Engine изолирована и блокирует использование _winreg модуль. (Источник: /questions/38505902/nevozmozhno-importirovat-winreg-v-virtualnoj-srede-python-279/38505924#38505924)

Согласно этому комментарию от Google App Engine группы,

С версией Python >= 2.7.4 для sys.platform явно не установлено значение 'linux3' в среде sanbox dev_appserver в Windows, поскольку App Engine SDK >= 1.9.34. [...] К сожалению, оригинальный код sandbox.py для sys.platform = 'linux3' был создан для совместимости со старыми системами.

Другие вопросы по тегам