Python relative imports in AWS Lambda fail with `attempted relative import with...
source link: https://gist.github.com/gene1wood/06a64ba80cf3fe886053f0ca6d375bc0
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
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
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK