Как развернуть функцию в 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 ответов


вот несколько шагов, которые должны сделать его работу:

  1. убедитесь, что запись обработчика s-function.json имеет имя функции в своем пути: "handler": "function-name/handler.handler",
  2. на 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 загрузить функцию с зависимостями.