¿Cómo implemento una función en python con sus dependencias?

Estoy tratando de usar el marco serverless para crear e implementar una función de AWS Lambda. vendored una carpeta llamada vendored en la raíz del proyecto e instalé (usando pip install ) las dependencias de la función. Sin embargo, cada vez que bash ejecutarlo (usando la serverless function run ) recibí un error:

Sin servidor: Ejecutando isNewUser …
Sin servidor: ADVERTENCIA: Esta variable no está definida: región
Sin servidor: —————–
Serverless: Falló – Este error fue devuelto:
Serverless: {“excepción”: [“Traceback (última llamada más reciente): \ n”, “Archivo \” / inicio / fernando / .nvm / versiones / nodo / v5.10.1 / bin / serverless-run-python-handler \ “, línea 170, en \ n handler = import_program_as_module (ruta) \ n”, “File \” / home / fernando / .nvm / versions / node / v5.10.1 / bin / serverless-run-python-handler \ ” , línea 149, en import_program_as_module \ n module = make_module_from_file (‘lambda_handler’, handler_file) \ n “,” File \ “/ home / fernando / .nvm / versiones / node / v5.10.1 / bin / serverless-run-python- handler \ “, línea 129, en make_module_from_file \ n py_source_description \ n”, “File \” / home / fernando / workspace / os-cac / isNewUser / handler.py \ “, línea 11, in \ n de vtex.order import Order \ n “,” ImportError: No hay un módulo llamado vtex.order \ n “],” success “: false} Sin servidor: Mensaje de excepción de Python
Serverless: Traceback (última llamada más reciente):, archivo “/home/fernando/.nvm/versions/node/v5.10.1/bin/serverless-run-python-handler”, línea 170, en handler = import_program_as_module (ruta) , Archivo “/home/fernando/.nvm/versions/node/v5.10.1/bin/serverless-run-python-handler”, línea 149, en import_program_as_module module = make_module_from_file (‘lambda_handler’, handler_file), File / home /fernando/.nvm/versions/node/v5.10.1/bin/serverless-run-python-handler “, línea 129, en make_module_from_file py_source_description, File” /home/fernando/workspace/os-cac/isNewUser/handler.py “, línea 11, desde vtex.order import Order, ImportError: no hay módulo llamado vtex.order`

vtex.order es un módulo importado en handler.py

La estructura de mi proyecto es algo así como:

 /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 

¿Hay algo que estoy haciendo mal? ¿Debería configurar de alguna manera mi función para incluir las dependencias del proveedor?

    Aquí hay algunos pasos que deberían hacer que funcione:

    1. Asegúrese de que la entrada del controlador en s-function.json tenga el nombre de la función en su ruta: "handler": "function-name/handler.handler",
    2. en handler.py agrega lo siguiente:

       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 

    Eso es. Déjame saber si funcionó.

    Recomiendo usar el complemento sin requisitos de python para incluir paquetes instalados a través de pip

    Seguí los siguientes pasos para desplegar con dependencias:

    • Creé un directorio para dependencias en la raíz del proyecto mkdir .vendor

    • Agregue las dependencias en el archivo Requirements.txt manualmente o use pip freeze > requirements.txt

    • Actualizar el archivo serverless.yml

    package: include: - .vendor/**

    • Incluir el directorio .vendor en la ruta del sistema en el archivo handler.py

    import sys sys.path.insert(0, './.vendor')

    • Dependencias de pip install -r requirements.txt -t .vendor

    Ahora el serverless deploy cargará la función con dependencias.