2016-08-10 3 views
14

Я следовал учебнику, чтобы создать приложение Alexa с помощью Python:Как добавить библиотеки python в функцию AWS лямбда для Alexa?

Python Alexa Tutorial

я смог успешно выполнить все шаги и получить приложение к work.I теперь хочу, чтобы изменить код питона и использовать внешние библиотеки, такие как import requests или любые другие библиотеки, которые я устанавливаю с помощью pip. Как настроить мою лямбда-функцию для включения любых пакетов пакетов, которые я устанавливаю локально на своей машине?

ответ

6

Как описано в официальной документации Amazon link here Это так же просто, как просто создать почтовый индекс всех содержимого папки после установки необходимых пакетов в вашем где у вас есть код лямбда-кода на python.

Как указал Vineeth в своем комментарии, самым первым шагом в переходе от встроенного редактора кода к подходу к загрузке zip-файла является изменение имени обработчика функции лямбда в настройках конфигурации, чтобы включить имя файла сценария python, которое содержит лямбда-обработчик.

lambda_handler => {your-python-script-file-name} .lambda_handler.

CONFIGURE LAMBDA FUNCTION

Другие решения, такие как python-lambda и lambda-uploader помощь при упрощении процесса загрузки и самое главное LOCAL ТЕСТИРОВАНИЕ. Это сэкономит много времени на разработке.

+0

Этот способ не работает для скрипта python 3.6 с psycopg2. Получение ошибки «Не удалось импортировать модуль« ProcessRawRetailSalesUsingCOPY »: нет модуля с именем« psycopg2._psycopg »« Я использую windows7 prof с pycharm. Нужна помощь, если можно. –

8

official documentation довольно хорошо. В двух словах вам нужно создать zip-файл каталога, содержащего как код вашей лямбда-функции, так и все внешние библиотеки, которые вы используете на верхнем уровне.

Вы можете имитировать это путем деактивации виртуального файла, копируя все необходимые библиотеки в рабочий каталог (который всегда находится в sys.path, если вы вызываете скрипт в командной строке) и проверяете, работает ли ваш скрипт.

+0

Я попытался после документации. I pip установил запросы в библиотеку. Я взял color_game.py и добавил «запросы на импорт» вверху, каталог запросов и каталог запросов - 2.11.0.dist-info и отправил эти три в zip-файл. Я загрузил zip-файл в лямбда, но когда я пытаюсь запустить функцию Alexa; это не работает. Я получаю 'Удаленная конечная точка не может быть вызвана, или ответ, который он ответил, был недействительным.' –

+3

Я понял! Я понял, что не меняю имя моего обработчика. Это должно быть filename.lambda_handler, если вы переходите от встроенного кода к zip-файлу. Благодаря! –

+0

Мы только что начали проект [bstpy] (https://github.com/bespoken/bstpy), чтобы открыть lambda Python в качестве службы http. Вы можете найти это полезным для тестирования. Вы можете набрасывать на него json-файлы с помощью завитка или почтальона. Если вы попробуете его с помощью других инструментов Bespoken Tools (https://github.com/bespoken/bst), вы можете иметь очень приятную среду разработки. –

6

Возможно, вы захотите изучить фреймворки, такие как zappa, которые будут обрабатывать упаковку и развертывание функции лямбда для вас.

Вы можете использовать это в сочетании с flask-ask, чтобы легче сделать навыки Alexa. Существует даже видео-учебник по этому вопросу (от zappa readme) here

0

Ответ на эхо @ d3ming, каркас - это хороший способ пойти в этот момент. Создание пакета развертывания вручную не является невозможным, но вам нужно будет загружать скомпилированный код вашего пакета, и если вы компилируете этот код в системе, отличной от linux, вероятность столкнуться с проблемами с различиями между вашей системой и развернутая среда функции Lambda высока.

Затем вы можете обойти это, скомпилировав свой код на Linux-машине или контейнере Docker. Но между всей этой сложностью вы можете получить гораздо больше от принятия фреймворка.

Serverless хорошо принят и имеет поддержку пользовательских пакетов python. Он даже интегрируется с Docker для компиляции ваших зависимостей на основе python и создания пакета развертывания для вас.

Если вы ищете полное руководство по этому вопросу, I wrote one for Python Lambda functions here.

Смежные вопросы