Wie stelle ich eine Funktion in Python mit ihren Abhängigkeiten bereit?

8

Ich versuche, das serverless -Framework zu verwenden, um eine AWS-Lambda-Funktion zu erstellen und zu implementieren. Ich habe einen Ordner namens vendored im Stammverzeichnis des Projekts erstellt und die Funktionsabhängigkeiten installiert (mit pip install ). Jedoch, wenn ich versuche, es (mit serverless function run ) zu starten, habe ich einen Fehler:

  

Serverless: Ausführen isNewUser ...
  Serverless: WARNUNG: Diese Variable ist nicht definiert: Region
  Serverless: -----------------
  Serverless: Fehlgeschlagen - Dieser Fehler wurde zurückgegeben:
  Serverless: {"Ausnahme": ["Traceback (letzter Aufruf zuletzt): \ n", "Datei \" / home / fernando / .nvm / versionen / node / v5.10.1 / bin / serverless-run-python-handler \ ", Zeile 170, in \ n handler = Importprogramm_als_Modul (Pfad) \ n", "Datei \" / home / fernando / .nvm / versionen / node / v5.10.1 / bin / serverless-run-python-handler \ " , Zeile 149, in import_program_as_module \ n modul = make_module_from_file ('lambda_handler', handler_file) \ n "," Datei \ "/ home / fernando / .nvm / versionen / node / v5.10.1 / bin / serverless-run-python handler \ ", Zeile 129, in make_module_from_file \ n py_source_description \ n", "Datei \" / home / fernando / workspace / os-cac / isNewUser / handler.py \ ", Zeile 11, in \ n aus vtex.order importieren Order \ n "," ImportError: Kein Modul namens vtex.order \ n "]," Erfolg ": false}   Serverless: Ausnahmemeldung von Python
  Serverless: Traceback (letzter Aufruf zuletzt):   , Datei "/home/fernando/.nvm/versions/node/v5.10.1/bin/serverless-run-python-handler", Zeile 170, in       handler = import_program_as_module (Pfad)   , Datei "/home/fernando/.nvm/versions/node/v5.10.1/bin/serverless-run-python-handler", Zeile 149, in import_program_as_module       modul = make_module_from_file ('lambda_handler', handler_file)   , Datei "/home/fernando/.nvm/versions/node/v5.10.1/bin/serverless-run-python-handler", Zeile 129, in make_module_from_file       py_source_description   , Datei "/home/fernando/workspace/os-cac/isNewUser/handler.py", Zeile 11, in       von vtex.order Importauftrag   , ImportError: Kein Modul namens vtex.order   "

vtex.order ist ein in handler.py importiertes Modul

Die Struktur meines Projekts ist ungefähr wie folgt:

%Vor%

Gibt es irgendetwas, was ich falsch mache? Sollte ich irgendwie meine Funktion so konfigurieren, dass sie die Abhängigkeiten von vendored enthält?

    
Fernando Pereira 29.04.2016, 17:33
quelle

3 Antworten

8

Hier sind ein paar Schritte, die es funktionieren lassen sollten:

  1. Stellen Sie sicher, dass der Handler-Eintrag in s-function.json den Funktionsnamen in seinem Pfad hat: %Code%
  2. in "handler": "function-name/handler.handler", fügen Sie Folgendes hinzu:

    %Vor%

Das ist es. Lass es mich wissen, wenn es funktioniert.

    
Benny Bauer 29.04.2016, 18:00
quelle
3

Ich habe die folgenden Schritte zur Bereitstellung mit Abhängigkeiten ausgeführt:

  • Erstellt ein Verzeichnis für Abhängigkeiten im Projektstamm mkdir .vendor

  • Fügen Sie Abhängigkeiten in der Datei "requirements.txt" manuell hinzu oder verwenden Sie pip freeze > requirements.txt

  • Aktualisieren Sie die Datei serverless.yml

package: include: - .vendor/**

  • Fügen Sie das .vendor-Verzeichnis dem Systempfad in der Handler.py-Datei
  • hinzu

import sys sys.path.insert(0, './.vendor')

  • Installieren Sie Abhängigkeiten pip install -r requirements.txt -t .vendor

Jetzt wird serverless deploy eine Funktion mit Abhängigkeiten hochladen.

    
Rajesh Hegde 13.01.2017 12:18
quelle
2

Ich würde empfehlen, das Serverless-Python-Requirements Plugin zu verwenden, um Pakete einzubinden, die über pip     

tkwargs 01.09.2017 12:51
quelle