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"
- 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)
- puis téléchargé le paquet dans S3
- 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
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.
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
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.
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.
Pour inclure numpy dans votre lambda zip suivez les instructions sur cette page dans les AWS docs...
Pour paraphraser les instructions de la section utilisation de numpy comme exemple:
- ouvrir les pages du module à pypi.org. https://pypi.org/project/numpy/
Choisir Télécharger fichier.
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
- 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.