Les Pandas dans AWS lambda donne numpy erreur

j'ai essayé d'exécuter mon code dans AWS Lambda qui importe des pandas. Voici donc ce que j'ai fait. J'ai un fichier python qui contient un code simple comme suit(Ce fichier a le gestionnaire lambda)

import json
print('Loading function')
import pandas as pd
def lambda_handler(event, context):
    return "Welcome to Pandas usage in AWS Lambda"
  1. j'ai zippé ce fichier python avec les bibliothèques numpy, pandas et pytz comme un paquet de déploiement (fait tout cela dans la machine linux Amazon EC2)
  2. puis téléchargé le paquet dans S3
  3. création d'une fonction lambda(runtime=python3.6) et téléchargé le package de déploiement à partir de S3

mais quand je teste la fonction lambda dans AWS Lambda, j'obtiens l'erreur suivante:

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

j'ai déjà num PY dans le paquet zippé mais j'ai quand même cette erreur. J'ai essayé de suivre les conseils donnés à Pandas & AWS Lambda mais pas de chance.

quelqu'un A couru dans le même problème. Apprécierait toute suggestion ou suggestion pour résoudre ce problème.

Merci

19
demandé sur Community 2017-05-09 21:48:56

5 réponses

EDIT: j'ai finalement trouvé comment exécuter pandas & numpy dans un environnement D'exécution D'AWS Lambda Python 3.6.

j'ai téléchargé mon paquet de déploiement sur la repo suivante:

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

il suffit d'ajouter votre lambda_function.py pour le fichier zip en cours d'exécution:

zip -ur lambda.zip lambda_function.py

Télécharger les S3 et source de lambda.

ORIGINAL:

la seule façon dont J'ai fait fonctionner Pandas dans une fonction lambda est en compilant les pandas (et numpy) bibliothèques dans une instance AWS Linux EC2 en suivant les étapes de ce post et ensuite utiliser le python 2.7 runtime pour ma fonction lambda.

4
répondu pbegle 2017-10-01 21:16:26

pour obtenir des bibliothèques supplémentaires dans Lambda, nous devons les compiler sur Amazon Linux (c'est important si la bibliothèque sous-jacente est basée sur C ou C++ comme pour Numpy) et les empaqueter dans un fichier ZIP avec le script python que vous voulez lancer dans Lambda.

pour obtenir la version compilée Linux D'Amazon des bibliothèques. Vous pouvez soit trouver une version que quelqu'un a déjà compilée, comme celle de @pbegle, soit la compiler vous-même. Pour le compiler nous-mêmes il y a deux options: - compiler les bibliothèques sur une instance EC2 https://streetdatascience.com/2016/11/24/using-numpy-and-pandas-on-aws-lambda/ - compiler les bibliothèques sur une version docker de L'environnement Lambda https://serverlesscode.com/post/scikitlearn-with-amazon-linux-container/

suivant la dernière option avec Docker, il est possible de le faire fonctionner en utilisant les instructions dans le blog post ci-dessus et en ajoutant:

pip install --use-wheel pandas

dans le script pour compiler le bibliothèques:

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

1
répondu Pierre-Antoine 2017-10-14 21:15:58

légèrement dupliqué de ne peut pas trouver MySQL dans NodeJS en utilisant AWS Lambda

vous devez empaqueter vos bibliothèques avec Lambda. Comme lambda fonctionne sur un nuage public, vous ne pouvez pas le configurer.

dans votre cas, comme vous utilisez pandas, vous devez empaqueter Pandas avec votre zip. Obtenez un chemin vers pandas(par exemple: /Users/dummyUser/anaconda/lib/python3.6 / site-packages) et copiez la bibliothèque à l'endroit où vous avez votre code de fonction lambda. À l'intérieur de votre code, référez-vous à pandas de votre copie locale. Pendant le téléchargement, fermez l'ensemble (code + bibliothèques), et téléchargez comme vous le voulez. Il devrait fonctionner.

1
répondu Dishant Kapadiya 2017-10-14 22:31:57

j'ai été aux prises avec une erreur similaire en essayant d'utiliser python3.MOTEUR 6. Quand je suis passé à 2.7, ça a bien marché pour moi. J'ai utilisé Amazon AMI pour créer mon fichier zip, mais il n'a que python3.5, pas 3.6. Je suppose que l'inadéquation de la version était la raison. Mais c'est juste une supposition, Je n'ai pas essayé le processus sur un python3.6 installation.

0
répondu Pavel Anni 2017-07-30 22:52:10

Pour inclure numpy dans votre lambda zip suivez les instructions sur cette page dans les AWS docs...

comment ajouter des paquets Python avec des binaires compilés à mon paquet de déploiement et rendre le paquet compatible avec AWS Lambda?

Pour paraphraser les instructions de la section utilisation de numpy comme exemple:

  1. ouvrir les pages du module à pypi.org. https://pypi.org/project/numpy/
  2. Choisir Télécharger fichier.

  3. Téléchargement:

Pour Python 2.7, module-nom-version-cp27-cp27mu-manylinux1_x86_64.whl par exemple numpy-1.15.2-cp27-cp27m-manylinux1_x86_64.whl Pour Python 3.6, module-nom-version-cp36-cp36m-manylinux1_x86_64.whl par exemple numpy-1.15.2-cp36-cp36m-manylinux1_x86_64.whl

  1. Décompresser la roue fichier sur le /chemin/vers/projet-dir dossier. Vous pouvez utiliser la commande unzip sur la ligne de commande pour ce faire. Il ya d'autres façons évidemment.

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

lorsque le fichier wheel n'est pas compressé, votre paquet de déploiement sera compatible avec Lambda.

j'Espère que tout fait sens ;)

le résultat final pourrait ressembler à ceci. REMARQUE: Vous ne devez pas inclure le fichier whl dans le paquet de déploiement.

What it might look like

0
répondu chim 2018-10-05 12:24:34