Numpy: Impossible d'importer numpy dans la fonction AWS Lambda

Créé le 4 mai 2019  ·  14Commentaires  ·  Source: numpy/numpy

  • comment vous avez installé Python
    supprimé python3 sur mon mac puis brew install python pour installer python 3.7.3
  • comment tu as installé numpy
    Depuis que j'installe pour exécuter sur AWS Lambda, pip install numpy --target .
  • votre système d'exploitation
    Mac OS Sierra 10.12.6
  • que vous ayez ou non plusieurs versions de Python installées
    le python natif 2.7.10 est toujours installé sur mon mac
  • si vous avez construit à partir des sources, vos versions de compilateur et idéalement un journal de construction
    N / A

Je peux donc exécuter mon code localement et je n'ai aucun problème. Je suis pandas, matplotlib, boto3 et mpld3 pour organiser et afficher des données dans une table AWS DDB avec des graphiques matplotlib que mpld3 transforme en html. numpy semble être nécessaire pour les pandas, et chaque fois que j'essaie d'installer ces bibliothèques dans un répertoire cible afin qu'elles puissent s'exécuter dans une fonction lambda, selon https://docs.aws.amazon.com/lambda/latest/dg/lambda -python-how-to-create-deployment-package.html , j'obtiens l'erreur suivante :

```IMPORTANT : VEUILLEZ LIRE CECI POUR AVOIR DES CONSEILS SUR LA RÉSOLUTION DE CE PROBLÈME !

L'importation du module d'extension numpy multiarray a échoué. Plus
vous essayez probablement d'importer une version échouée de numpy.
Voici comment procéder :

  • Si vous travaillez avec un dépôt numpy git, essayez git clean -xdf
    (supprime tous les fichiers qui ne sont pas sous contrôle de version) et reconstruit numpy.
  • Si vous essayez simplement d'utiliser la version numpy que vous avez installée :
    votre installation est cassée - veuillez réinstaller numpy.
  • Si vous avez déjà réinstallé et que cela n'a pas résolu le problème, alors :

    1. Vérifiez que vous utilisez le Python que vous attendez (vous utilisez /var/lang/bin/python3.6),

      et que vous n'avez aucun répertoire dans votre PATH ou PYTHONPATH qui puisse

      interférer avec les versions Python et numpy que vous essayez d'utiliser.

    2. Si (1) semble correct, vous pouvez ouvrir un nouveau problème à

      https://github.com/numpy/numpy/issues. Veuillez inclure des détails sur :



      • comment vous avez installé Python


      • comment tu as installé numpy


      • votre système d'exploitation


      • que vous ayez ou non plusieurs versions de Python installées


      • si vous avez construit à partir des sources, vos versions de compilateur et idéalement un journal de construction



 Note: this error has many possible causes, so please don't comment on
 an existing issue about this - open a new one instead.

L'erreur d'origine était : aucun module nommé 'numpy.core._multiarray_umath'

FIN ID de demande : 2fc65f50-420d-441b-930c-665b1c8ab3ea
REPORT RequestId : 2fc65f50-420d-441b-930c-665b1c8ab3ea Durée : 0,85 ms Durée facturée : 100 ms Taille de la mémoire : 128 Mo Mémoire max. utilisée : 40 Mo ```

Commentaire le plus utile

Ce guide AWS ne vous raconte pas toute l'histoire. La distribution Amazon Linux n'est pas compatible avec une installation NumPy régulière comme celle de PyPi ou conda-forge.

Je vous suggère de suivre l'un de ces guides ou d'utiliser un fichier zip de l'un de ces dépôts :
https://medium.com/@samme/setting-up-python-3-6-aws-lambda-deployment-package-with-numpy-scipy-pillow-and-scikit-image-de488b2afca6
https://medium.com/@korniichuk/lambda-with-pandas-fd81aa2ff25e
https://blog.orikami.nl/building-scipy-pandas-and-numpy-for-aws-lambda-python-3-6-cba9355b44e9
https://github.com/pbegle/aws-lambda-py3.6-pandas-numpy
https://github.com/vitolimandibhrata/aws-lambda-numpy

Ce n'est pas un bogue NumPy, je vais donc fermer le problème.

Tous les 14 commentaires

Pour isoler le problème, j'ai réessayé ce qui précède avec:

def main(event, context):

    a = 100
    print(a)
    return

et

import numpy as np

def main(event, context):

    a = np.array(100)
    print(a)
    return

Les deux fichiers ont été compressés dans un répertoire package contenant une installation ciblée de numpy selon https://docs.aws.amazon.com/lambda/latest/dg/lambda-python-how-to-create-deployment- package.html. Après avoir compressé, les fichiers faisaient environ 16 Mo, ils avaient donc l'installation numpy. Le premier exemple qui n'a pas importé numpy s'exécute correctement lors du test de la fonction Lambda, mais le second erreur avec le message d'erreur d'origine

Ce guide AWS ne vous raconte pas toute l'histoire. La distribution Amazon Linux n'est pas compatible avec une installation NumPy régulière comme celle de PyPi ou conda-forge.

Je vous suggère de suivre l'un de ces guides ou d'utiliser un fichier zip de l'un de ces dépôts :
https://medium.com/@samme/setting-up-python-3-6-aws-lambda-deployment-package-with-numpy-scipy-pillow-and-scikit-image-de488b2afca6
https://medium.com/@korniichuk/lambda-with-pandas-fd81aa2ff25e
https://blog.orikami.nl/building-scipy-pandas-and-numpy-for-aws-lambda-python-3-6-cba9355b44e9
https://github.com/pbegle/aws-lambda-py3.6-pandas-numpy
https://github.com/vitolimandibhrata/aws-lambda-numpy

Ce n'est pas un bogue NumPy, je vais donc fermer le problème.

Merci,

J'apprécie votre réponse. Pour votre information, j'ai pu le faire fonctionner en lançant une instance EC2 avec le système d'exploitation AWS Linux et en y installant les bibliothèques. Tout fonctionnait très bien.

Merci pour l'aide,
Lee

Obtenez Outlook pour iOS https://aka.ms/o0ukef


De : Ralf Gommers [email protected]
Envoyé : samedi 4 mai 2019 06:52
À : numpy/numpy
Copie : Lee James ; Auteur
Objet : Re : [numpy/numpy] Impossible d'importer numpy dans la fonction AWS Lambda (#13465)

Ce guide AWS ne vous raconte pas toute l'histoire. La distribution Amazon Linux n'est pas compatible avec une installation NumPy régulière comme celle de PyPi ou conda-forge.

Je vous suggère de suivre l'un de ces guides ou d'utiliser un fichier zip de l'un de ces dépôts :
https://medium.com/@samme/setting-up-python-3-6-aws-lambda-deployment-package-with-numpy-scipy-pillow-and-scikit-image-de488b2afca6 https://urldefense. proofpoint.com/v2/url?u=https-3A__medium.com_-40samme_setting-2Dup-2Dpython-2D3-2D6-2Daws-2Dlambda-2Ddeployment-2Dpackage-2Dwith-2Dnumpy-2Dscipy-2Dpillow-2Dand-2Dscikit-2Dimage-2Dde488b2afca6&d= DwMCaQ&c=0hefKdg9jtsMu47wpF0ovg&r=2qmZ2aA-JTvfrp24tI1PaA&m=o4NpaNDNU2z8VYtFVRO3Z-KgjOittvdP3EKrsYfomhs&s=ZKkVD6L0iXq9wAG929BSTikIAEun9eeS4ZdgUw&e=Q8oY
https://medium.com/@korniichuk/lambda-with-pandas-fd81aa2ff25e https://urldefense.proofpoint.com/v2/url?u=https-3A__medium.com_-40korniichuk_lambda-2Dwith-2Dpandas-2Dfd81aa2ff25e&d=DwMCaQ&c= 0hefKdg9jtsMu47wpF0ovg&r=2qmZ2aA-JTvfrp24tI1PaA&m=o4NpaNDNU2z8VYtFVRO3Z-KgjOittvdP3EKrsYfomhs&s=PQOBXsoiGwGl3XWjQFqEbAK77Kg9THTSlEZOmLQNiJo&e=
https://blog.orikami.nl/building-scipy-pandas-and-numpy-for-aws-lambda-python-3-6-cba9355b44e9 https://urldefense.proofpoint.com/v2/url?u=https -3A__blog.orikami.nl_building-2Dscipy-2Dpandas-2Dand-2Dnumpy-2Dfor-2Daws-2Dlambda-2Dpython-2D3-2D6-2Dcba9355b44e9 & d = DwMCaQ & c = 0hefKdg9jtsMu47wpF0ovg & r = 2qmZ2aA-JTvfrp24tI1PaA & m = o4NpaNDNU2z8VYtFVRO3Z-KgjOittvdP3EKrsYfomhs & s = jm1X8lQ78YL30-NRN2kXnOGAhMS1LKSowIOFQMCpq5Y & e =
https://github.com/pbegle/aws-lambda-py3.6-pandas-numpy https://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_pbegle_aws-2Dlambda-2Dpy3.6-2Dpandas -2Dnumpy&d=DwMCaQ&c=0hefKdg9jtsMu47wpF0ovg&r=2qmZ2aA-JTvfrp24tI1PaA&m=o4NpaNDNU2z8VYtFVRO3Z-KgjOittvdP3EKrsYfomhs&s=708JPsyiBrAUC0pdCf1QwuLzJ4dEWaunFNusuZ=
https://github.com/vitolimandibhrata/aws-lambda-numpy https://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_vitolimandibhrata_aws-2Dlambda-2Dnumpy&d=DwMCaQ&c=0hefKdg9jtsMu47wpF0ovg&r=2qmZ2aA-JTvfrp24tI1PaA&m=o4NpaNDNU2z8VYtFVRO3Z -KgjOittvdP3EKrsYfomhs&s=poqmiFo_VPWUjgf2NEI4vBxzANNWtRm3sXSUypHO88w&e=

Ce n'est pas un bogue NumPy, je vais donc fermer le problème.


Vous recevez ceci parce que vous êtes l'auteur du fil.
Répondre à cet e - mail directement, vue sur GitHub https://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_numpy_numpy_issues_13465-23issuecomment-2D489329007&d=DwMCaQ&c=0hefKdg9jtsMu47wpF0ovg&r=2qmZ2aA-JTvfrp24tI1PaA&m=o4NpaNDNU2z8VYtFVRO3Z-KgjOittvdP3EKrsYfomhs&s=J7VXklMAkObDeLGzi_DueXIZ7gya0qrVm9tZhLH9dzI&e= ou couper le fil https://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_notifications_unsubscribe-2Dauth_AHKHI4N5E7XURJJTX7INB6LPTWIJVANCNFSM4HKX25DQ&d=DwMCaQ&c=0hefKdg9jtsMu47wpF0ovg&r=2qmZ2aA-JTvfrp24tI1PaA&m=o4NpaNDNU2z8VYtFVRO3Z-KgjOittvdP3EKrsYfomhs&s=zMXEEFbVt2bm8P0Cn2aJbHDaSdV0ABZ_hgsaB2AWUWg&e= .

@rgommers Connaissez-vous des astuces liées à python3.7 à ce sujet. J'ai essayé quelques-uns de votre liste de 3.6 et je me retrouve toujours avec le même reproche à propos de la bibliothèque _multiarray. Je dois créer une "couche" AWS car la combinaison dont j'ai besoin (numpy, scipy, pandas) dépasse la taille autorisée d'une seule fonction.

@iceback si votre erreur était similaire à celle que j'avais, qui était No module named 'numpy.core._multiarray_umath' , cela est dû au fait que numpy n'est pas installé avec le bon système d'exploitation.

AWS lambda va exécuter AWS linux au moment de l'exécution, donc tous les packages installés sur la cible doivent être installés avec le système d'exploitation approprié. Si vous ciblez l'installation numpy dans un répertoire package via pip install --target ./package numpy et que vous exécutez un autre système d'exploitation (tel que macOS), cela échouera car l'installation cible suppose que le Le système d'exploitation ne changera pas de votre système d'exploitation natif.

Pour contourner cela, vous avez deux options :

  1. Effectuez l'installation cible à partir d'une machine exécutant AWS Linux, telle qu'une instance EC2. Cela a très bien fonctionné pour moi.
  2. Découvrez comment spécifier le système d'exploitation d'exécution dans votre commande d'installation cible. Si vous trouvez un bon moyen de le faire, merci de partager 😄

Je vais devoir revoir toutes les choses que j'ai essayées la semaine dernière, y compris le @korniichuk et github/pbegle et Dieu sait quoi d'autre, mais qui se sont toujours retrouvés au même endroit. Construire numpy sur un EC2 ne va pas bien. Peut-être une mauvaise version de Cython (seulement 0.27 disponible sur aws linux). Pouvez-vous préciser votre #1. Comment passer d'un numpy installé sur une instance à une couche sur Lambda ?

@iceback Ya c'était frustrant quand je l'ai fait pour la première fois, mais c'est tout à fait possible. J'exécute actuellement des fonctions Lambda avec Python 3.7 avec les 3 packages que vous avez mentionnés.

La façon dont j'ai effectué l'étape 1. ci-dessus impliquait de suivre les étapes décrites dans Mise à jour d'une fonction avec des dépendances supplémentaires , décrites ici . Par souci de simplicité, je vais supposer que votre fichier python local s'appelle _pony.py_ et que la fonction lambda_function est invoquée avec la fonction _ride_pony_.

  1. Lancez et connectez -vous à une instance EC2, telle qu'une micro-instance EC2. Trouvez les instructions ici . Assurez-vous que l'instance exécute AWS Linux.
  2. Vérifiez que python3 est installé. S'il n'est pas installé, installez-le avec sudo yum install python3 -y
  3. Créez un répertoire pour vos packages locaux. mkdir package
  4. Installez les bibliothèques que vous souhaitez utiliser dans Lambda. Pour votre information, j'appelle toujours pip en tant que module pour éviter toute confusion entre les pips Python2 et Python3. De plus, certains ordres d'installation peuvent être préférés dans ces installations et cela peut valoir la peine d'être étudié.
  5. python3 -m pip install --target ./package numpy
  6. python3 -m pip install --target ./package pandas
  7. python3 -m pip install --target ./package scipy
  8. Déplacez-vous dans le répertoire d'installation avec cd package
  9. Compressez le répertoire d'installation avec zip -r9 ../pony.zip .
  10. Maintenant, depuis votre ordinateur local , scp _pony.zip_ de votre instance EC2 vers votre local avec les instructions ici .
  11. Depuis votre local , compressez _pony.py_ dans _pony.zip_. zip -g pony.zip pony.py . Votre fichier zip contient maintenant votre code lambda ainsi que les modules python nécessaires, qui ont été installés pour cibler avec un système d'exploitation AWS Linux.
  12. Téléchargez le fichier zip sur S3 (ce qui permet des fonctions lambda plus importantes, jusqu'à 50 Mo). Si votre code est petit, vous pouvez passer à l'étape 10.
  13. Accédez à votre fonction lambda (ou mettez à jour depuis la CLI) pour utiliser le code dans pony.zip pour cette fonction lambda

**Assurez-vous que votre fonction lambda pointe vers et exécute votre nom de fichier et votre fonction principale, _pony.ride_pony_, s'il ne s'agit pas de la _lambda_function.lambda_handler_ par défaut

Merci beaucoup. Je crois que j'ai une chance ! (Je crois comprendre que le haut du zip doit être "python" pour une couche Lambda, donc je vais l'utiliser au lieu de "package")

Criez ce guide à haute voix et fier ! Je ne sais pas où je suis allé à l'encontre de l'autre suggestion (bien qu'ils soient pour python3.6) mais je suis maintenant de retour au travail sur mon code de fonction. Merci beaucoup.

AWS a également publié une couche qui inclut NumPy et SciPy. Depuis https://aws.amazon.com/blogs/aws/new-for-aws-lambda-use-any-programming-language-and-share-common-components/

_Sur la base des commentaires de nos clients et pour fournir un exemple d'utilisation des couches Lambda, nous publions une couche publique qui comprend NumPy et SciPy, deux bibliothèques scientifiques populaires pour Python. Cette couche prédéfinie et optimisée peut vous aider à démarrer très rapidement avec des applications de traitement de données et d'apprentissage automatique._

Hm, pourrait-il y avoir trop de documentation AWX ? ;)

Le 23 octobre 2019, à 4 h 29, Ralf Gommers [email protected] a écrit :

AWS a également publié une couche qui inclut NumPy et SciPy. Depuis https://aws.amazon.com/blogs/aws/new-for-aws-lambda-use-any-programming-language-and-share-common-components/ https://aws.amazon.com/blogs /aws/new-for-aws-lambda-use-any-programming-language-and-share-common-components/
Sur la base des commentaires de nos clients et pour fournir un exemple d'utilisation des couches Lambda, nous publions une couche publique qui comprend NumPy et SciPy, deux bibliothèques scientifiques populaires pour Python. Cette couche prédéfinie et optimisée peut vous aider à démarrer très rapidement avec des applications de traitement de données et d'apprentissage automatique.


Vous recevez ceci parce que vous avez été mentionné.
Répondre à cet e - mail directement, voir sur GitHub https://github.com/numpy/numpy/issues/13465?email_source=notifications&email_token=AACY7PDHEVUY6IGQ6IXVXPLQQARRNA5CNFSM4HKX25D2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOECA5ACQ#issuecomment-545378314 ou désabonnement https://github.com/notifications/unsubscribe- auth/AACY7PFK3DUQOBMT5QA2ID3QQARRNANCNFSM4HKX25DQ .

Ce qui a fonctionné pour moi a été d'utiliser une version Linux de la bibliothèque numpy (j'utilise macOS). Je suis allé sur https://pypi.org/project/numpy/#files et j'ai téléchargé le fichier .whl dans la version que je cherchais (pour moi, c'était numpy-1.19.0-cp37-cp37m-manylinux1_x86_64.whl) . Ensuite, allez dans le terminal et décompressez-le en faisant 'unzip numpy-1.19.0-cp37-cp37m-manylinux1_x86_64.whl'. Cela devrait vous donner la version numpy qui fonctionnera sur Lambda. Ensuite, compressez tout comme vous le faisiez auparavant et téléchargez-le. En fin de compte, un problème incroyablement frustrant a été résolu assez simplement.

J'ai eu le même problème, la solution qui a fonctionné pour moi est que j'ai désinstallé numpy de mon PC (Windows 7).
que j'ai ajouté une couche dans la fonction aws lambda quelque chose appelé AWSlambda scipy et c'est tout.

J'ai rencontré le même problème avec Windows mais j'ai pu le résoudre par l'une des approches suivantes :

  • Créez Lambda avec AWS SAM (modèle d'application sans serveur) exécuté sur Ubuntu qui s'exécute sur WSL (sous-système Windows pour Linux)
  • Créez Lambda avec AWS SAM à l'aide de l'indicateur --use-container , qui a l'explication suivante dans la documentation :

Si vos fonctions dépendent de packages qui ont des dépendances compilées en mode natif, utilisez cet indicateur pour créer votre fonction dans un conteneur Docker de type AWS Lambda.

Cette page vous a été utile?
0 / 5 - 0 notes