Numpy: numpy kann nicht in die AWS Lambda-Funktion importiert werden

Erstellt am 4. Mai 2019  ·  14Kommentare  ·  Quelle: numpy/numpy

  • wie du Python installiert hast
    python3 auf meinem Mac gelöscht und dann brew install python um Python 3.7.3 zu installieren
  • wie du numpy installiert hast
    Da ich für die Ausführung auf AWS Lambda installiere, pip install numpy --target .
  • Ihr Betriebssystem
    macOS Sierra 10.12.6
  • ob Sie mehrere Versionen von Python installiert haben oder nicht
    das native python 2.7.10 ist noch auf meinem mac installiert
  • Wenn Sie aus dem Quellcode erstellt haben, Ihre Compiler-Versionen und idealerweise ein Erstellungsprotokoll
    N / A

So kann ich meinen Code lokal ausführen und habe keine Probleme. Ich bin pandas, matplotlib, boto3 und mpld3, um Daten in einer AWS-DDB-Tabelle mit Matplotlib-Grafiken zu organisieren und anzuzeigen, die mpld3 in HTML umwandelt. numpy scheint für Pandas benötigt zu werden, und wann immer ich versuche, diese Bibliotheken in einem Zielverzeichnis zu installieren, damit sie gemäß https://docs.aws.amazon.com/lambda/latest/dg/lambda in einer Lambda-Funktion ausgeführt werden können

```WICHTIG: BITTE LESEN SIE DIES FÜR RATSCHLÄGE ZUR LÖSUNG DIESES PROBLEMS!

Das Importieren des Multiarray-Numpy-Erweiterungsmoduls ist fehlgeschlagen. Die meisten
Wahrscheinlich versuchen Sie, einen fehlgeschlagenen Build von numpy zu importieren.
So gehen Sie vor:

  • Wenn Sie mit einem numpy Git-Repository arbeiten, versuchen Sie es mit git clean -xdf
    (entfernt alle Dateien, die nicht unter Versionskontrolle stehen) und numpy neu erstellen.
  • Wenn Sie einfach versuchen, die von Ihnen installierte numpy-Version zu verwenden:
    Ihre Installation ist defekt - bitte installieren Sie numpy neu.
  • Wenn Sie bereits neu installiert haben und das Problem dadurch nicht behoben wurde, dann:

    1. Überprüfen Sie, ob Sie das erwartete Python verwenden (Sie verwenden /var/lang/bin/python3.6),

      und dass Sie keine Verzeichnisse in Ihrem PATH oder PYTHONPATH haben, die das können

      stören die Python- und numpy-Versionen, die Sie verwenden möchten.

    2. Wenn (1) gut aussieht, können Sie unter ein neues Problem eröffnen

      https://github.com/numpy/numpy/issues. Bitte machen Sie Angaben zu:



      • wie du Python installiert hast


      • wie du numpy installiert hast


      • Ihr Betriebssystem


      • ob Sie mehrere Versionen von Python installiert haben oder nicht


      • Wenn Sie aus dem Quellcode erstellt haben, Ihre Compiler-Versionen und idealerweise ein Erstellungsprotokoll



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

Ursprünglicher Fehler war: Kein Modul namens 'numpy.core._multiarray_umath'

ENDE Anforderungs-ID: 2fc65f50-420d-441b-930c-665b1c8ab3ea
REPORT RequestId: 2fc65f50-420d-441b-930c-665b1c8ab3ea Dauer: 0,85 ms Abgerechnete Dauer: 100 ms Speichergröße: 128 MB Max. verwendeter Speicher: 40 MB ```

Hilfreichster Kommentar

Dieser AWS-Leitfaden erzählt Ihnen nicht die ganze Geschichte. Die Amazon Linux-Distribution ist nicht mit einer regulären NumPy-Installation wie von PyPi oder Conda-Forge kompatibel.

Ich schlage vor, dass Sie einer dieser Anleitungen folgen oder eine ZIP-Datei aus einem dieser Repos verwenden:
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

Dies ist kein NumPy-Fehler, daher werde ich das Problem schließen.

Alle 14 Kommentare

Um das Problem zu isolieren, habe ich das Obige erneut versucht mit:

def main(event, context):

    a = 100
    print(a)
    return

und

import numpy as np

def main(event, context):

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

Beide Dateien wurden in ein package -Verzeichnis gezippt, das eine gezielte Installation von numpy enthält, gemäß https://docs.aws.amazon.com/lambda/latest/dg/lambda-python-how-to-create-deployment- Paket.html. Nach dem Komprimieren waren die Dateien ~16 MB groß, also hatten sie die numpy-Installation. Das erste Beispiel, das numpy nicht importiert hat, läuft beim Testen der Lambda-Funktion einwandfrei, aber das zweite Beispiel zeigt die ursprüngliche Fehlermeldung an

Dieser AWS-Leitfaden erzählt Ihnen nicht die ganze Geschichte. Die Amazon Linux-Distribution ist nicht mit einer regulären NumPy-Installation wie von PyPi oder Conda-Forge kompatibel.

Ich schlage vor, dass Sie einer dieser Anleitungen folgen oder eine ZIP-Datei aus einem dieser Repos verwenden:
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

Dies ist kein NumPy-Fehler, daher werde ich das Problem schließen.

Danke,

Ich schätze Ihre Antwort. FYI Ich konnte es zum Laufen bringen, indem ich eine EC2-Instance mit dem AWS Linux OS initiierte und die Bibliotheken dort installierte. Alles hat super funktioniert.

Danke für die Hilfe,
Lee

Holen Sie sich Outlook für iOS https://aka.ms/o0ukef


Von: Ralf Gommers [email protected]
Gesendet: Samstag, 4. Mai 2019, 6:52 Uhr
An: numpy/numpy
CC: Lee James; Autor
Betreff: Re: [numpy/numpy] numpy kann nicht in die AWS Lambda-Funktion importiert werden (#13465)

Dieser AWS-Leitfaden erzählt Ihnen nicht die ganze Geschichte. Die Amazon Linux-Distribution ist nicht mit einer regulären NumPy-Installation wie von PyPi oder Conda-Forge kompatibel.

Ich schlage vor, dass Sie einer dieser Anleitungen folgen oder eine ZIP-Datei aus einem dieser Repos verwenden:
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=ZKkVD6L0iXq9wAG929BSTikIAEun9eeS4ZdgU&w1Q
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=708JPsyiAUC0pdCf1QwuLzJ4dEWunF=NuuZ
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=

Dies ist kein NumPy-Fehler, daher werde ich das Problem schließen.


Sie erhalten dies, weil Sie den Thread verfasst haben.
Antworten Sie auf diese E - Mail direkt, sehen sie auf 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= oder stumm schalten den Faden 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 Kennen Sie irgendwelche python3.7-bezogenen Tipps dazu. Ich habe ein paar aus Ihrer Liste von 3.6 ausprobiert und endete immer mit der gleichen Beschwerde über die _multiarray lib. Ich muss eine AWS-"Ebene" erstellen, da die Kombination, die ich benötige (numpy, scipy, pandas), die zulässige Größe einer einzelnen Funktion überschreitet.

@iceback Wenn Ihr Fehler dem ähnlich war, was ich hatte, nämlich No module named 'numpy.core._multiarray_umath' , wird dies dadurch verursacht, dass numpy nicht mit dem richtigen Betriebssystem installiert wird.

AWS Lambda wird AWS Linux zur Laufzeit ausführen, daher sollten alle zielinstallierten Pakete mit dem richtigen Betriebssystem installiert werden. Wenn Sie numpy über pip install --target ./package numpy $ in ein Verzeichnis package installieren und ein anderes Betriebssystem (z. B. macOS) ausführen, schlägt dies fehl, da die Zielinstallation davon ausgeht, dass die Das Betriebssystem ändert sich nicht von Ihrem nativen Betriebssystem.

Um dies zu umgehen, haben Sie zwei Möglichkeiten:

  1. Führen Sie die Zielinstallation von einer Maschine aus, auf der AWS Linux ausgeführt wird, z. B. eine EC2-Instance. Das hat bei mir super funktioniert.
  2. Finden Sie heraus, wie Sie das Laufzeitbetriebssystem in Ihrem Zielinstallationsbefehl angeben. Wenn Sie einen guten Weg finden, dies zu tun, teilen Sie ihn bitte 😄

Ich muss all die Dinge, die ich letzte Woche ausprobiert habe, noch einmal durchgehen, darunter @korniichuk und github/pbegle und Gott weiß was noch, aber immer an derselben Stelle gelandet sind. Numpy auf einem EC2 zu bauen geht nicht gut. Möglicherweise falsche Cython-Version (nur 0.27 auf aws linux verfügbar). Kannst du deine Nummer 1 näher erläutern? Wie gelangt man von einem installierten numpy auf einer Instanz zu einem Layer auf Lambda?

@iceback Ya, das war frustrierend, als ich es zum ersten Mal gemacht habe, aber es ist definitiv möglich. Ich führe derzeit Lambda-Funktionen mit Python 3.7 mit den 3 von Ihnen erwähnten Paketen aus.

Wie ich Schritt 1. oben ausgeführt habe, beinhaltete die Befolgung der Schritte, die in Aktualisieren einer Funktion mit zusätzlichen Abhängigkeiten beschrieben sind und hier beschrieben werden. Der Einfachheit halber gehe ich davon aus, dass Ihre lokale Python-Datei _pony.py_ heißt und die lambda_function mit der _ride_pony_-Funktion aufgerufen wird.

  1. Starten Sie eine EC2-Instance, z. B. eine EC2-Micro-Instance, und stellen Sie eine Verbindung zu ihr her. Anleitungen finden Sie hier . Stellen Sie sicher, dass die Instance AWS Linux ausführt.
  2. Prüfen Sie, ob python3 installiert ist. Wenn es nicht installiert ist, installieren Sie es mit sudo yum install python3 -y
  3. Erstellen Sie ein Verzeichnis für Ihre lokalen Pakete. mkdir package
  4. Installieren Sie die Bibliotheken, die Sie in Lambda verwenden möchten. FYI Ich nenne Pip immer als Modul, um Verwechslungen zwischen Python2- und Python3-Pips zu vermeiden. Außerdem kann bei diesen Installationen eine bestimmte Installationsreihenfolge bevorzugt werden, und das kann sich lohnen, zu recherchieren.
  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. Wechseln Sie mit cd package in das Installationsverzeichnis
  9. Zippen Sie das Installationsverzeichnis mit zip -r9 ../pony.zip .
  10. Nun scp _pony.zip_ von Ihrem lokalen Computer aus Ihrer EC2-Instance zu Ihrem lokalen mit den Anweisungen hier .
  11. Komprimieren Sie von Ihrem lokalen _pony.py_ in _pony.zip_. zip -g pony.zip pony.py . Ihre ZIP-Datei enthält jetzt Ihren Lambda-Code zusammen mit den erforderlichen Python-Modulen, die für das Ziel mit einem AWS Linux-Betriebssystem installiert wurden.
  12. Laden Sie die ZIP-Datei in S3 hoch (was größere Lambda-Funktionen ermöglicht, bis zu 50 MB). Wenn Ihr Code klein ist, können Sie mit Schritt 10 fortfahren.
  13. Rufen Sie Ihre Lambda-Funktion auf (oder aktualisieren Sie sie über die CLI), um den Code in pony.zip für diese Lambda-Funktion zu verwenden

**Stellen Sie sicher, dass Ihre Lambda-Funktion auf Ihren Dateinamen und Ihre Hauptfunktion _pony.ride_pony_ zeigt und diese ausführt, wenn es nicht die Standardfunktion _lambda_function.lambda_handler_ ist.

Danke sehr. Ich glaube, ich habe eine Chance! (Mein Verständnis ist, dass der obere Teil des Reißverschlusses für eine Lambda-Ebene "Python" sein muss, also werde ich das anstelle von "Paket" verwenden.)

Rufen Sie diese Anleitung laut und stolz aus! Ich bin mir nicht sicher, wo ich mit dem anderen Vorschlag in Konflikt geraten bin (obwohl sie für python3.6 waren), aber ich arbeite jetzt wieder an meinem Funktionscode. Danke vielmals.

AWS hat nun auch einen Layer veröffentlicht, der NumPy und SciPy beinhaltet. Von https://aws.amazon.com/blogs/aws/new-for-aws-lambda-use-any-programming-language-and-share-common-components/

_Basierend auf unserem Kundenfeedback und um ein Beispiel für die Verwendung von Lambda-Layern zu geben, veröffentlichen wir einen öffentlichen Layer, der NumPy und SciPy enthält, zwei beliebte wissenschaftliche Bibliotheken für Python. Diese vorgefertigte und optimierte Ebene kann Ihnen helfen, sehr schnell mit Datenverarbeitungs- und maschinellen Lernanwendungen zu beginnen._

Hm, könnte es zu viel AWX-Dokumentation geben? ;)

Am 23. Oktober 2019 um 4:29 Uhr schrieb Ralf Gommers [email protected] :

AWS hat nun auch einen Layer veröffentlicht, der NumPy und SciPy beinhaltet. Von 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/
Basierend auf unserem Kundenfeedback und um ein Beispiel für die Verwendung von Lambda-Layern zu geben, veröffentlichen wir einen öffentlichen Layer, der NumPy und SciPy enthält, zwei beliebte wissenschaftliche Bibliotheken für Python. Diese vorgefertigte und optimierte Ebene kann Ihnen helfen, sehr schnell mit Datenverarbeitungs- und maschinellen Lernanwendungen zu beginnen.


Sie erhalten dies, weil Sie erwähnt wurden.
Antworten Sie auf diese E - Mail direkt, sehen sie auf GitHub https://github.com/numpy/numpy/issues/13465?email_source=notifications&email_token=AACY7PDHEVUY6IGQ6IXVXPLQQARRNA5CNFSM4HKX25D2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOECA5ACQ#issuecomment-545378314 oder abmelden https://github.com/notifications/unsubscribe- auth/AACY7PFK3DUQOBMT5QA2ID3QQARRNANCNFSM4HKX25DQ .

Was für mich funktioniert hat, war die Verwendung einer Linux-Version der numpy-Bibliothek (ich verwende macOS). Ich ging zu https://pypi.org/project/numpy/#files und lud die .whl-Datei in der Version herunter, nach der ich suchte (für mich war es numpy-1.19.0-cp37-cp37m-manylinux1_x86_64.whl) . Gehen Sie als nächstes zum Terminal und entpacken Sie es, indem Sie 'unzip numpy-1.19.0-cp37-cp37m-manylinux1_x86_64.whl' ausführen. Dies sollte Ihnen die numpy-Version geben, die auf Lambda funktioniert. Dann komprimieren Sie alles wie zuvor und laden es hoch. Am Ende wurde ein unglaublich frustrierendes Problem ziemlich einfach gelöst.

Ich hatte das gleiche Problem, die Lösung, die für mich funktioniert hat, ist, dass ich numpy von meinem PC (Windows 7) deinstalliert habe.
als ich eine Schicht in der aws Lambda-Funktion hinzugefügt habe, etwas namens AWSlambda scipy und das war's.

Ich bin auf das gleiche Problem mit Windows gestoßen, konnte es aber mit einem der folgenden Ansätze lösen:

  • Erstellen Sie Lambda mit AWS SAM (Serverless Application Model), das auf Ubuntu ausgeführt wird, das auf WSL (Windows-Subsystem für Linux) ausgeführt wird.
  • Erstellen Sie Lambda mit AWS SAM unter Verwendung des --use-container -Flags, das die folgende Erklärung in der Dokumentation enthält:

Wenn Ihre Funktionen von Paketen abhängen, die nativ kompilierte Abhängigkeiten haben, verwenden Sie dieses Flag, um Ihre Funktion in einem AWS Lambda-ähnlichen Docker-Container zu erstellen.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen