Ich versuche, eine Python-basierte AWS-Lambda-Funktion zu erstellen und muss ein Modul importieren. Ich habe die Anweisungen in befolgtErstellen eines Bereitstellungspakets (Python)auf Amazon.
Wenn ich die ZIP-Datei erstelle und hochlade, enthält die ZIP-Datei:
Ich habe die usaddress-Abhängigkeiten in den usaddress-Ordner gelegt, obwohl ich nur vermute, dass sie dorthin gehören.
Wenn ich die Datei auf Lambda hochlade, wird auf jeden Fall ein Fehler zurückgegeben:
{
"errorMessage": "Unable to import module 'Tester2'"
}
START RequestId: e9c2cafe-3705-11e6-a289-5366a5578765 Version: $LATEST
Unable to import module 'Tester2': No module named future.builtins
END RequestId: e9c2cafe-3705-11e6-a289-5366a5578765
Die Datei usaddress/pycrfsuite/_pycrfsuite.pyd wird von der usaddress/pycrfsuite __init_
Datei importiert. Die _pycrfsuite befindet sich im richtigen Verzeichnis, aber ich weiß nicht, warum sie ignoriert wird.
Wie bekomme ich das zum Laufen?
Antwort1
Nach langer Recherche wurde mir klar, dass .pyd-Dateien (das ist der Dateityp der ignorierten Datei) kompilierte Cython-Dateien sind und dass sie auf DOS- und UNIX-Systemen unterschiedlich kompiliert werden. Also öffnete ich eine EC2-Instanz, installierte usaddress, die Abhängigkeitsbibliothek, und kopierte die .so-Datei, die die EC2-Instanz kompiliert hatte.
Das hat letztendlich funktioniert, es handelte sich also wirklich um ein Problem inkompatibler Systemdateien.