J'ai un fichier avec ceci comme contenu.
def print_hello_world(): print ('Hello World')
Il est compressé dans un dossier contenant un fichier __init__.py
.
J'ajoute ceci en tant que couche et définit le temps d'exécution correct de python3.6.
Comment l'importer dans ma fonction lambda via le code lambda?
Edit: Après avoir recherché, j'ai trouvé que lambda monte les couches sur / opt et si vous ajoutez / choisissez votre syspath via sys.path.insert (0, '/ opt'), vous pouvez importer vos couches.
Vous pouvez voir vos calques sur: print (os.listdir ("/ opt"))
Il doit y avoir une manière plus élégante de faire ça!
3 Réponses :
J'ai donc récemment rencontré ce problème et je pense avoir trouvé un moyen plus propre d'importer vos calques.
Tout d'abord pour la structure du fichier zip que vous téléchargez:
__init__.py
python
import {filename}
Donc, si votre script dans le dossier python
s'appelait quelque chose comme custom_helper.py
, importez-le dans votre lambda avec import custom_helper
.
Je ne sais pas si cela est la manière propre à le faire, mais il semble assez simple pour commencer.
Votre fichier zip doit avoir la structure suivante:
python / lib / python3.7 / site-packages
Autrement dit, il a besoin d'un dossier nommé Python, et dans ce dossier nommé lib, et dans ce dossier nommé python3.7, et dans ce dossier nommé site-packages. Tout ce qui se trouve dans ce dossier sera disponible pour l'importation.
(Si vous utilisez une autre version de Python, cette version devrait être dans le chemin au lieu de 3.7)
Tu devras:
sudo docker run -v "$PWD":/var/task "lambci/lambda:build-${penv}" /bin/sh -c "pip install -r requirements.txt -t python/lib/${penv}/site-packages/; exit"
sys.path
dans votre Lambda avant l'importationimport sys; sys.path.append('/opt/python/lib/python3.7/site-packages'); import apsw print(apsw.__file__) /opt/python/lib/python3.7/site-packages/apsw.cpython-37m-x86_64-linux-gnu.so
Vérifiez ici et ici .
J'ai vu les deux. Les documents AWS sont basés à 100% sur le cli. L'article était tout simplement faux (pour le dire sans ambages).
J'utilise cloudformation. J'ai trouvé que l'ajout de sys.path.insert (0, '/ opt') me permet d'importer mes calques. Après avoir identifié l'emplacement de mon calque avec print (os.listdir ("/ opt")).
Il doit y avoir un meilleur moyen, non?