studio paquetes org mexico language for python pandas numpy amazon-s3 aws-lambda

python - paquetes - r packages list



Pandas en AWS lambda da error numpy (5)

He estado intentando ejecutar mi código en AWS Lambda, que importa pandas. Así que aquí está lo que he hecho. Tengo un archivo de Python que contiene un código simple como sigue (Este archivo tiene el controlador lambda)

import json print(''Loading function'') import pandas as pd def lambda_handler(event, context): return "Welcome to Pandas usage in AWS Lambda"

  1. He comprimido este archivo de Python junto con las bibliotecas numpy, pandas y pytz como un paquete de implementación (todo esto en la máquina de Linux Amazon EC2)
  2. Luego subí el paquete a S3
  3. Creó una función lambda (runtime = python3.6) y cargó el paquete de implementación desde S3

Pero cuando pruebo la función lambda en AWS Lambda, aparece el siguiente error:

Unable to import module ''lambda_function'': Missing required dependencies [''numpy'']

Ya tengo números en el paquete comprimido, pero aún así recibo este error. Intenté seguir los consejos dados en Pandas & AWS Lambda, pero no tuve suerte.

¿Alguien se topó con el mismo problema? Agradecería cualquier sugerencia o sugerencia para resolver este problema.

Gracias


EDITAR: Finalmente descubrí cómo ejecutar pandas & numpy en un entorno de ejecución AWS Lambda python 3.6.

He cargado mi paquete de implementación en el siguiente repositorio:

git clone https://github.com/pbegle/aws-lambda-py3.6-pandas-numpy.git

Simplemente agregue su lambda_function.py al archivo zip ejecutando:

zip -ur lambda.zip lambda_function.py

Subir a S3 y fuente a lambda.

ORIGINAL:

La única manera de hacer que Pandas funcione en una función lambda es compilando las bibliotecas pandas (y numpy) en una instancia de AWS Linux EC2 siguiendo los pasos de esta publicación del blog y luego utilizando el tiempo de ejecución de python 2.7 para mi función lambda.


He estado luchando con un error similar al intentar usar el motor python3.6. Cuando cambié a 2.7 funcionó bien para mí. Utilicé Amazon AMI para crear mi archivo zip, pero solo tiene python3.5, no 3.6. Supongo que la falta de coincidencia de versión fue la razón. Pero es solo una conjetura, todavía no he probado el proceso en una instalación de python3.6.


Ligeramente duplicado de No se puede encontrar MySQL en NodeJS usando AWS Lambda

Necesitas empaquetar tus librerías con Lambda. Como lambda se ejecuta en una nube pública, no puede configurarlo.

Ahora, en su caso, como está utilizando pandas, debe empaquetar Pandas con su zip. Obtenga una ruta a pandas (por ejemplo: /Users/dummyUser/anaconda/lib/python3.6/site-packages) y copie la biblioteca en el lugar donde tenga su código de función lambda. Dentro de su código, refiérase a pandas de su copia local. Al cargar, comprima el conjunto completo (código + bibliotecas) y cárguelo como desee. Deberia de funcionar.


Para incluir numpy en su zip lambda siga las instrucciones de esta página en los documentos de AWS ...

¿Cómo agrego paquetes de Python con binarios compilados a mi paquete de implementación y hago que el paquete sea compatible con AWS Lambda?

Parafraseando las instrucciones usando numpy como ejemplo:

  1. Abra las páginas del módulo en pypi.org. https://pypi.org/project/numpy/
  2. Elija Descargar archivos.

  3. Descargar:

Para Python 2.7, nombre-módulo-versión-cp27-cp27mu-manylinux1_x86_64.whl

por ejemplo, numpy-1.15.2-cp27-cp27m-manylinux1_x86_64.whl

Para Python 3.6, nombre-módulo-versión-cp36-cp36m-manylinux1_x86_64.whl

por ejemplo, numpy-1.15.2-cp36-cp36m-manylinux1_x86_64.whl

  1. Descomprima el archivo de rueda en la carpeta / path / to / project-dir. Puede usar el comando Unzip en la línea de comandos para hacer esto. Obviamente hay otras formas.

unzip numpy-1.15.2-cp36-cp36m-manylinux1_x86_64.whl

Cuando el archivo de la rueda no esté comprimido, su paquete de implementación será compatible con Lambda.

Espero que todo tenga sentido ;)

El resultado final puede verse algo como esto. Nota: no debe incluir el archivo whl en el paquete de implementación.


Para obtener bibliotecas adicionales en Lambda, debemos compilarlas en Amazon Linux (esto es importante si la biblioteca subyacente está basada en C o C ++, como Numpy) y empaquetarlas en un archivo ZIP junto con el script de Python que desea ejecutar en Lambda. .

Para obtener la versión compilada de Amazon Linux de las bibliotecas. Puede encontrar una versión que alguien ya haya compilado, como la de @pbegle, o compilarla usted mismo. Para compilarlo nosotros mismos hay dos opciones: - compilar las bibliotecas en una instancia de EC2 https://streetdatascience.com/2016/11/24/using-numpy-and-pandas-on-aws-lambda/ - compilar las bibliotecas en una versión docker del entorno Lambda https://serverlesscode.com/post/scikitlearn-with-amazon-linux-container/

Siguiendo la última opción con Docker, es posible hacer que funcione utilizando las instrucciones en la publicación del blog anterior y agregando:

pip install --use-wheel pandas

En el script para compilar las bibliotecas:

https://github.com/ryansb/sklearn-build-lambda/blob/master/build.sh#L21