我正在一个使用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本身找不到该功能。
答案 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
正在使用的软件包,因为这是需要修复的实际问题。
希望这有一天能帮助其他人。让我知道是否可以提供尚未提供的更多信息。