TLDR:
pip install --target path/to/folder package-to-install
(and run this from an AWS Lambda base runtime image)
Why do you need to do this?
AWS Lambda requires you to create a zipped folder that includes:
- A file to run your code (the “entry point”)
 - All libraries needed to execute the code
 
The entry point is just a file with code that will accept the parameters Lambda gives it and run your code. For example,
your entry point file could be called main.py and might look like this:
def hello_world(event, context):
    print("Hello world!")
The actual names of the entry point file and function does not matter. They can both
be configured in Lambda. In this example, you would configure Lambda to run main.hello_world
What happens if I don’t?
Here’s what happens if you used a third party package like requests but didn’t include the library in the zip file for Lambda:
import requests
def hello_world(event, context):
    resp = requests.get("example.com")
    print(resp)
Runtime.ImportModuleError: Unable to import module 'main': No module named 'requests'
Install Example
To fix this, you would need to install the requests pacakge to the directory that contains main.py - your entry point file. For example:
pip install --target ./lambda_example requests
Now, if you list the lambda_example directory you’ll see the requests folder/module and it’s dependencies:
ls -a ./lambda_example:
bin                                     charset_normalizer-3.3.2.dist-info      requests
certifi                                 idna                                    requests-2.31.0.dist-info
certifi-2023.11.17.dist-info            idna-3.6.dist-info                      urllib3
charset_normalizer                      main.py                                 urllib3-2.1.0.dist-info
Plot-twist: Lambda uses a specific base image for a runtime
TLDR: Install the needed libraries from a Lambda runtime base image from here
Third party libraries installed on your mac-os won’t always work on lambda’s runtime. AWS Lambdas use specific runtimes based on a specific architecture.
To fix this, you’ll need to:
- 
pull and build the runtime specific docker image for your Lambda. You can find these here (choose runtime from branch name): github.com/aws/aws-lambda-base-images
 - 
Run the above
pipcommands from that docker container:docker run -v /local_directory:/working -it --rm lambda3.9:local 
The -v parameter sets up a volume to the path you choose locally. Make this where you want to install the libs to.
Basically, you need to run a container that has the same runtime AWS Lambda will have and install 3rd party libraries there. Then you can upload those with your Lambda zip file. Now, you won’t have compatibility issues.