Lambda函数-如何在多个文件中拆分python代码

时间:2018-08-01 01:13:21

标签: python python-3.x aws-lambda

问题

我正在尝试将Lambda函数的python代码拆分为多个文件,但是任何尝试导入其他相关模块的操作都会为顶级模块抛出错误。

{
  "errorMessage": "Unable to import module 'download_ga_data'"
}

我在做什么错?感觉应该很基础。

文件结构布局(从根目录显示)

- download_ga_data.py
   - [analytics]
        - google.py (contains a single class)
        - __init__.py
   - [helpers]
        - main.py (contains a single class)
        - __init__.py
   - {other libraries from site-packages}

download_ga_data.py的内容

# import unicodecsv as csv
import os

# import path
from . import definitions
from analytics.google import GoogleAnalytics
from helpers.main import GoogleCloudStorageBucket

def lambda_handler(event, context):
    print("test")

按现状显示此错误将引发错误。如果我将os之后的三个导入注释掉,则它将正常运行。

我应该如何正确导入这两个模块,感觉好像缺少了一些超基本的东西。

环境说明

全部基于以下lambda mimicking docker构建,并直接上传到S3中。所有文件均为777,以绕过任何权限错误。

1 个答案:

答案 0 :(得分:0)

确定终于解决了。我收到的帮助解决此问题的主要技巧是,将我的加载函数包装在try语句块之外:

try:
    import definitions
    from analytics.google import GoogleAnalytics
    from cloud_helpers.main import GoogleCloudStorageBucket
except Exception as e:
    error = str(e)
    stacktrace = json.dumps(traceback.format_exc())
    message = "Exception: " + error + "  Stacktrace: " + stacktrace
    err = {"message": message}
    return respond(err)

def respond(err, res=None):
    return {
        "statusCode": "400" if err else "200",
        "body": err["message"] if err else json.dumps(res),
        "headers": {"Content-Type": "application/json"},
    }

这随后揭示了以下错误(我很烦恼的只是它的屏幕截图):

enter image description here

然后通过切换到import definitions

解决了