Import pytz into AWS lambda function

17,173

Solution 1

You need to install the pytz package so it's available for your lambda. The way you do this is having pip install it into the directory you are going to zip and upload to AWS (i.e. peered with the file containing your lambda function).

pip install -t path/to/your/lambda pytz

Then when you zip it up and upload it, it will be available.

Editing to add that I created a tool to do a lot of this for you - you can find it here: https://github.com/jimjkelly/lambda-deploy

Solution 2

If you don't have access to pytz in your environment, maybe you have access to python-dateutil. In that case you can do:

import datetime
import dateutil.tz

eastern = dateutil.tz.gettz('US/Eastern')
datetime.datetime.now(tz=eastern)

REF. How to get current time in Pacific Timezone when import pytz fails?

Solution 3

To follow up on @cheframzi's answer to "Package a pytz zip file in the format python/pytz/..." as a Lambda Layer, here is one way to do that.

mkdir python
pip3 install -t python pytz=='2019.2'
zip -r pytz.zip python
rm -rf python

And then you can use aws lambda publish-layer-version --layer-name <layer_name> --zip-file fileb://./pytz.zip to deploy a new version of the layer.

As long as the library is installed at the python/pytz level of the zip file, AWS Lambda should be able to find it. You can also put it inside python/lib/python3.8/site-packages\pytz though for your specific python runtime version per here: https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html

Solution 4

I ran into this issue today. The way I solved is

  • Package a pytz zip file in the format python/pytz/... the library file
  • Created a Lambda Layer enter image description here
  • In my lambda used the above layer
Share:
17,173
Scott Decker
Author by

Scott Decker

Updated on July 21, 2022

Comments

  • Scott Decker
    Scott Decker almost 2 years

    I'm writing a lambda function that works with datetimes and trying to import pytz so I can have timezone be accounted for when comparing.

    import boto3
    import pytz
    from datetime import timedelta, date, datetime
    from boto3.dynamodb.conditions import Key, Attr
    

    causes this to display

    {errorMessage=Unable to import module 'lambda_function'}
    

    but when I remove import pytz the function fires (it just doesn't work properly without timezone info)