AWS Lambda (python2.7): добавление matplotlib в качестве слоя - PullRequest
0 голосов
/ 02 января 2019

У меня возникли проблемы при попытке добавить matplotlib в качестве слоя к моей функции Python 2.7 AWS Lambda.

В Лямбда-среде исполнения я пытаюсь установить необходимые библиотеки и создать слой, как описано здесь .

Вещи, которые я имеюпопробовал:

Сначала я pip install редактировал matplotlib в виртуальной среде и копировал содержимое пакетов сайта в lib и lib64.Когда лямбда-функция выполняется, я получаю исключение No module named pkg_resources.Я также попытался установить с параметром --target, чтобы установить все зависимости в одну папку.Результат был таким же.

Я прочитал здесь , что это может быть связано с устаревшим пакетом setuptools.Когда я сделал обновление pip install --upgrade setuptools, а затем попытался установить matplotlib, я начал получать следующее исключение:

pkg_resources.DistributionNotFound: The 'pip==9.0.3' distribution was not found and is required by the application 

Наконец, я подумал об установке matplotlib с

sudo yum install python-matplotlib

и затем собралнеобходимые пакеты, как описано здесь .Но из-за этого не удалось импортировать matplotlib из оболочки python, поэтому я думаю, что он не будет работать как слой Lambda.

Спасибо за любую помощь.

PS: В AWS re: изобретать, именно это было демо , но нет подробностей о сеансе: /

1 Ответ

0 голосов
/ 21 марта 2019

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

В моем случае я заархивировал все зависимости из целевого каталога, используя опцию --target, чтобы все каталоги зависимостей находились на верхнем уровне zip-файла. Это хорошо работает для прямого развертывания Lambda, но когда вы хотите использовать слой, этот слой развертывается в папке / opt вашего контейнера Lambda, поэтому вам нужно создать zip-файл с каталогом верхнего уровня с именем «python». так что ваши зависимости могут быть расположены в /opt/python/.

mkdir python && cd python && pip install pyopenssl crypto --target . && cd .. && zip -r9 ./lambda_layer.zip python/

Оно появляется в документации, но оно краткое и ОЧЕНЬ легко пропустить. Эта страница помогла мне: https://medium.com/@adhorn/getting-started-with-aws-lambda-layers-for-python-6e10b1f9a5d

Удачи!

...