Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 90 You must be signed in to star a gist
  • Fork 8 You must be signed in to fork a gist
  • Save gene1wood/06a64ba80cf3fe886053f0ca6d375bc0 to your computer and use it in GitHub Desktop.
Save gene1wood/06a64ba80cf3fe886053f0ca6d375bc0 to your computer and use it in GitHub Desktop.
Python relative imports in AWS Lambda fail with `attempted relative import with no known parent package`

Python relative imports in AWS Lambda fail with attempted relative import with no known parent package

The Problem

In AWS Lambda if I attempt an explicit relative import like this

.
├── lambda_file.py
└── example.py
# lambda_file.py
from .example import lambda_handler
# example.py
def lambda_handler(event, context):
    return True

And I configure AWS Lambda's handler to lambda_file.lambda_handler I get the following errors

  • Python 2.7 : Attempted relative import in non-package
  • Python 3.7 : attempted relative import with no known parent package

Why use explicit relative imports

PEP008 says :

Implicit relative imports should never be used and have been removed in Python 3.

How to workaround by using implicit relative imports

If I change lambda_file.py to contain the following, it works, but no longer uses explicit relative imports

# lambda_file.py
from example import lambda_handler

How to correctly solve the problem

The solution is to ensure that the "Handler" value that you configure in AWS Lambda contain at least 2 . periods. To achieve this you need to put your code within a directory in your AWS Lambda code zip file and make that directory a module by adding an empty __init__.py file. The resulting structure looks like this

.
├── app
│   ├── __init__.py
│   ├── lambda_file.py
│   └── example.py

And you now change the "Handler" value from lambda_file.lambda_handler to app.lambda_file.lambda_handler

Additional Notes

@nk9
Copy link

nk9 commented Jul 17, 2022

Thanks so much, this quickly helped me solve my problem!

@whoizNiKHiL
Copy link

Thanks .

@SpicySoftware
Copy link

Thanks a lot!

@MZuk543
Copy link

MZuk543 commented Feb 2, 2024

Thank you!

@thomasuebel
Copy link

Thanks a bunch! I spent too much time figuring this out.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment