Как развернуть функцию в python с ее зависимостями?
Я пытаюсь использовать serverless
framework для создания и развертывания функции AWS Lambda. Я создал папку с именем vendored
в корне проекта и установлен (используя pip install
) зависимости функции. Однако всякий раз, когда я пытаюсь запустить его (используя serverless function run
) Я получил сообщение об ошибке:
Serverless: запуск isNewUser...
Serverless: предупреждение: эта переменная не определена: region
Serverless: -----------------
Serverless: Failed - Эта Ошибка Было Возвращено:
Serverless: {"exception": ["Traceback (последний последний вызов):n", "File " /home/fernando/.nvm / версии / узел / v5.10.1 / bin / serverless-run-python-handler", строка 170, In n handler = import_program_as_module (path)n", " File "/home/fernando/.nvm / версии / узел / v5.10.1 / bin / serverless-run-python-handler", строка 149, в модуле import_program_as_modulen = make_module_from_file ('lambda_handler', handler_file)n", " файл "/главная/Фернандо/.nvm / версии / узел / v5.10.1 / bin / serverless-run-python-handler", строка 129, в make_module_from_filen py_source_descriptionn", "File " /home/fernando/workspace/os-cac/isNewUser/handler.py", строка 11, в n из vtex.order import Ordern", " ImportError: нет модуля с именем vtex.ordern"], "success": false} Serverless: сообщение об исключении из Python
Serverless: Traceback (последний вызов): , Папка "/домой / Фернандо/.nvm / версии / узел / v5.10.1 / bin / serverless-run-python-handler", строка 170, in обработчик = import_program_as_module(путь) , Файл " / home / fernando/.nvm / версии / узел / v5.10.1 / bin / serverless-run-python-handler", строка 149, в модуле import_program_as_module module = make_module_from_file ('lambda_handler', handler_file) , Файл " / home / fernando/.nvm / версии / узел / v5.10.1 / bin / serverless-run-python-handler", строка 129, в файле make_module_from_file py_source_description , Папка "/home/fernando/workspace/os-cac/isNewUser/handler.py", строка 11, в От для vtex.заказать импорт заказа , ImportError: нет модуля с именем vtex.порядок `
vtex.order
модуль импортируется в handler.py
структура моего проекта-что-то вроде:
/root/
|
|--_meta/
|--vendored/
|--dependencies...
|--function-name/
|--handler.py
|--event.json
|--s-function.json
|--requirements.txt
|--admin.env
|--package.json
|--s-project.json
|--s-resources-cf.json
|--s-project.json
есть ли что-то, что я делаю неправильно? Я должен как-то настроить функцию, чтобы включить зависимости от проданы?
3 ответов
вот несколько шагов, которые должны сделать его работу:
- убедитесь, что запись обработчика
s-function.json
имеет имя функции в своем пути:"handler": "function-name/handler.handler",
-
на
handler.py
добавить следующее:import os import sys here = os.path.dirname(os.path.realpath(__file__)) sys.path.append(os.path.join(here, "../vendored")) from vtex.order import Order
вот и все. Дайте мне знать, если это сработает.
Я бы рекомендовал использовать serverless-python-требования плагин для включения пакетов, установленных через pip
Я выполнил следующие шаги для развертывания с зависимостями:
создал каталог для зависимостей в корне проекта
mkdir .vendor
добавить зависимости требований.txt-файл вручную или использовать
pip freeze > requirements.txt
быстрое обновление.файл YML
package:
include:
- .vendor/**
- включить .каталог поставщиков в системные пути в handler.py файл
import sys
sys.path.insert(0, './.vendor')
- зависимостей установить
pip install -r requirements.txt -t .vendor
теперь serverless deploy
загрузить функцию с зависимостями.