57 votes

Les pandas dans AWS lambda donnent une erreur numpy

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 la lambda gestionnaire)

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 numpy, des pandas et des pytz les bibliothèques comme un package de déploiement (Fait dans Amazon EC2 machine linux)
  2. Ensuite téléchargé le paquet dans S3
  3. Créé 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 ci-dessous:

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

J'ai déjà numpy dans le package zippé encore, mais je reçois ce message d'erreur. J'ai essayé de suivre les conseils donnés lors de Pandas & AWS Lambda mais pas de chance.

Quelqu'un a couru dans le même problème. Serions reconnaissants de tout soupçon ou des suggestions pour résoudre ce problème.

Merci

11voto

pbegle Points 158

EDIT: j'ai compris enfin comment faire pour exécuter les pandas & numpy dans une AWS Lambda python 3.6 de l'environnement d'exécution.

J'ai téléchargé mon package de déploiement sur le repo suivant:

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

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

zip -ur lambda.zip lambda_function.py

Télécharger S3 et source de lambda.

ORIGINE:

Le seul moyen que j'ai obtenu Pandas à travailler dans une fonction lambda est en compilant les pandas (et numpy) des bibliothèques dans une AWS Linux instance EC2 suivant les étapes de ce blog, et puis en utilisant le python 2.7 exécution de ma fonction lambda.

11voto

Ranadeep Guha Points 27

Après avoir fait beaucoup de recherche, j'ai pu le faire fonctionner avec Lambda couches.

Créer ou ouvrir un sous-répertoire propre et suivez les étapes ci-dessous:

Conditions préalables: assurez-vous d'avoir le Panneau en place et en cours d'exécution

  1. Créer un requirements.txt fichier avec le texte suivant:
pandas==0.23.4
pytz==2018.7
  1. Créer un get_layer_packages.sh fichier avec le texte suivant:
#!/bin/bash

export PKG_DIR="python"

rm -rf ${PKG_DIR} && mkdir -p ${PKG_DIR}

docker run --rm -v $(pwd):/foo -w /foo lambci/lambda:build-python3.6 \
    pip install -r requirements.txt --no-deps -t ${PKG_DIR}
  1. Exécutez les commandes suivantes dans le même répertoire:
chmod +x get_layer_packages.sh

./get_layer_packages.sh

zip -r pandas.zip .
  1. Télécharger la couche d'un compartiment S3.

  2. Télécharger la couche d'AWS en exécutant la commande ci-dessous:

aws lambda publish-layer-version --layer-name pandas-layer --description "Description of your layer"
--content S3Bucket*=<bucket name>*,S3Key=*<layer-name>*.zip
--compatible-runtimes python3.6 python3.7
  1. Aller à Lambda de la console et de télécharger votre code dans un fichier zip ou utiliser la ligne de l'éditeur.

  2. Cliquez sur une couche > Ajouter une couche de la Recherche> pour la couche (pandas-couche) à partir du Compatible calques et sélectionnez la version.

  3. Également ajouter le AWSLambda-Python36-SciPy1x couche, qui est disponible par défaut pour l'importation de numpy.

La sélection de la couche à partir de la console

  1. Tester le code. Il devrait fonctionner maintenant!!!!

Grâce à ce moyen l'article https://medium.com/@qtangs/creating-new-aws-lambda-layer-for-python-pandas-library-348b126e9f3e

10voto

chim Points 1799

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

Comment puis-je ajouter les paquets Python avec les binaires compilés pour mon package de déploiement et de rendre le paquet compatible avec AWS Lambda?

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

  1. Ouvrez le module de pages à pypi.org. https://pypi.org/project/numpy/
  2. Choisissez Téléchargement de fichiers.

  3. Télécharger:

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écompressez 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 y a d'autres moyens bien évidemment.

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

Lorsque la roue de fichier n'est pas compressé, votre paquet sera compatible avec Lambda.

Espérons que tous les sens ;)

Le résultat final pourrait ressembler à quelque chose comme ça. Remarque: vous ne devez pas inclure la whl fichier dans le package de déploiement.

What it might look like

2voto

user1162647 Points 300

Pour obtenir d'autres bibliothèques Lambda nous avons besoin de les compiler sur Linux Amazon (c'est important si la bibliothèque sous-jacente est basée sur C ou C++ comme pour Numpy) et de les emballer dans un fichier ZIP avec le script python que vous souhaitez exécuter en Lambda.

Pour obtenir le Amazon Linux version compilée des bibliothèques. Vous pouvez trouver une version que quelqu'un a déjà compilé, comme celle de @pbegle, ou de le compiler vous-même. Pour compiler soi-même 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 un docker version de Lambda environnement https://serverlesscode.com/post/scikitlearn-with-amazon-linux-container/

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

pip install --use-wheel pandas

dans le script pour compiler les bibliothèques:

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

1voto

Dishant Kapadiya Points 429

Légèrement duplicata de Ne peut pas trouver de MySQL dans NodeJS à l'aide d'AWS Lambda

Vous avez besoin pour emballer vos bibliothèques avec Lambda. Lambda s'exécute sur un cloud public, vous ne pouvez le configurer.

Maintenant, dans votre cas, comme vous utilisez les pandas, vous avez besoin pour emballer les Pandas avec votre zip. Obtenir un chemin d'accès pour les pandas(par exemple: /Users/dummyUser/anaconda/lib/python3.6/site-packages) et copie à la bibliothèque de l'endroit où vous avez votre lambda code de fonction. À l'intérieur de votre code, reportez-vous aux pandas à partir de votre copie locale. Pendant le téléchargement, zip de l'ensemble(code + bibliothèques), et envoyer que vous. Il devrait fonctionner.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X