When deploying Zappa applications, it's possible to package a version during deployment that can manifest is a bunch of missing dependency errors:
[ERROR] ImportError: Unable to import required dependencies: numpy: Error importing numpy: you should not try to import numpy from its source directory; please exit the numpy source tree, and relaunch your python interpreter from there. [ERROR] ImportError: Unable to import required dependencies: numpy: IMPORTANT: PLEASE READ THIS FOR ADVICE ON HOW TO SOLVE THIS ISSUE! Importing the numpy C-extensions failed. This error can happen for many reasons, often due to issues with your setup or how NumPy was installed. [ERROR] ImportError: No module named 'sklearn.__check_build._check_build' It seems that scikit-learn has not been built correctly.
Zappa claims to:
replace any dependencies with versions with wheels compatible with lambda
...but this doesn't seem to be the case (at least when building on apple M1 silicon). A fix I've found is to package and deploy within a docker container, which seems to work:
# Shell into a container. docker run --platform linux/amd64 -v $(pwd):/builds/ -it python:3.9.18-slim-bullseye /bin/bash # Create a virtual env to install dependencies. cd /builds/ python3 -m venv .venv && source .venv/bin/activate # Install the dependencies and zappa. pip install -r requirements.txt pip install zappa # Add credentials and deploy. mkdir ~/.aws && echo "creds" > ~/.aws/credentials zappa deploy dev
Ensure that the environment within the container matches that of your lambda deployment:
- Confirm the 'Architecture' is the same by running
arch
within the container and comparing to the above. - Ensure the python version matches by running
python --version
and selecting the correct docker container from this list: https://hub.docker.com/_/python/tags
Top comments (0)