Python无服务器(SLS):Runtime.ImportModuleError:无法导入模块

时间:2019-08-08 01:14:23

标签: python python-3.x lambda serverless-framework

我正在一个使用AWS CodeBuild部署用Python编写的无服务器(SLS)函数的项目。

在代码构建中,部署工作正常。它成功创建了函数,并且我可以在Lambda AWS UI中查看lambda。每当触发该函数时,我都会看到以下错误:

Runtime.ImportModuleError: Unable to import module 'some/function': attempted relative import with no known parent package

我知道该功能存在于上面列出的目录中,这非常令人沮丧。在CodeBuild脚本中,我可以ls进入目录并确认它确实存在。该函数在我的serverless.yml文件中定义如下:

functions:
  file-blaster:
    runtime: python3.7
    handler: some/function.function_name
    events:
      - existingS3:
          bucket: some_bucket
          events:
            - s3:ObjectCreated:*
          rules:
            - prefix: ${opt:stage}/some/prefix

可悲的是,我无法破解这一密码。在云端使用SLS和python时,有没有人有过类似的经历?

SLS成功构建和部署似乎很奇怪,但是Lambda本身找不到该功能。

2 个答案:

答案 0 :(得分:0)

我认为您需要从更改处理程序属性:

handler: some/function.function_name

handler: some/function.{lambda handler name}

就像,我的文件夹结构是:

- some
  - function1.py

然后我的模板将是:

functions:
  file-blaster:
    runtime: python3.7
    handler: some/function1.lambda_handler

有关更多详细信息,请点击此处https://serverless.com/framework/docs/providers/aws/guide/functions/

答案 1 :(得分:0)

对于关于Python导入的更长的讨论,这将是一个简短的答案。您可以自己研究相对和绝对进口之间的激烈争斗,以此作为python项目的设计。

要点: 有必要了解,存在serverless.yml文件的SLS函数 IS 的python导入基础(我想这类似于让{{​​1}}调用sls yml中称为“功能”的其他文件)。对于上面的情况,遇到问题时,我没有使用绝对导入来构造导入。我将所有导入内容切换为绝对路径,因此当我移动软件包时,它将继续起作用。

给我一​​个main.py的错误实际上无法描述实际问题。该错误应该包括尝试进行相对导入时找不到Runtime.ImportModuleError: Unable to import module 'some/function': attempted relative import with no known parent package正在使用的软件包,因为这是需要修复的实际问题。

希望这有一天能帮助其他人。让我知道是否可以提供尚未提供的更多信息。