Home > OS >  "errorMessage": "Unable to import module 'app': No module named 'app&#
"errorMessage": "Unable to import module 'app': No module named 'app&#

Time:02-22

I'm getting this error when trying to test my lambda-function

  "errorMessage": "Unable to import module 'app': No module named 'app'",
  "errorType": "Runtime.ImportModuleError",
  "stackTrace": []
}

Here's my python code since I'd imagine it's an issue with my code? I also have my lambda function handler on aws set to app.handler since this file's name is app.py. Really not sure if it's an issue with my lambda function handler or my code, or both

import requests
import os
import smtplib
from datetime import datetime

# https://openweathermap.org/api/one-call-api

# empire state building
lat = '40.75009231913161'
lon = '-73.98638285425646'
exclude = 'minutely,hourly,alerts'

url = (
    'https://api.openweathermap.org/data/2.5/onecall?'  
    'lat={lat}&lon={lon}&exclude={exclude}&appid={API_key}&units=imperial'
)


if os.path.isfile('.env'):
    from dotenv import load_dotenv
    load_dotenv()


def __send_email(msg: str) -> None:
    gmail_user = os.getenv('EMAIL_USER')
    gmail_password = os.getenv('EMAIL_PASSWORD')

    # Create Email
    mail_from = gmail_user
    mail_to = gmail_user
    mail_subject = f'Weather Today {datetime.today().strftime("%m/%d/%Y")}'
    mail_message = f'Subject: {mail_subject}\n\n{msg}'

    # Send Email
    server = smtplib.SMTP('smtp.gmail.com', 587)
    server.starttls()
    server.login(gmail_user, gmail_password)
    server.sendmail(mail_from, mail_to, mail_message)
    server.close()


def handler(event, context):
    response = requests.get(url.format(
        lat=lat,
        lon=lon,
        exclude=exclude,
        API_key=os.getenv('WEATHER_API_KEY')
    ))

    data = response.json()

    rain_conditions = ['rain', 'thunderstorm', 'drizzle']
    snow_conditions = ['snow']

    today_weather = data['daily'][0]['weather'][0]['main'].lower()

    if today_weather in rain_conditions:
        msg = 'Pack an umbrella!'
    elif today_weather in snow_conditions:
        msg = 'Pack your snow boots!'
    else:
        msg = 'Clear skies today!'

    __send_email(msg)

handler(None, None)

My ZIP is located in an S3 bucket in python/project.zip and the structure of my zip folder is python/app.py requirements.txt

CodePudding user response:

the structure of my zip folder is python/app.py requirements.txt

It should be only app.py, not python/app.py. Also there is no need for requirements.txt as lambda is not going to use it and install any packages you have listed there.

  • Related