Используйте 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' был создан для совместимости со старыми системами.