【问题标题】:AWS Lambda returns Unable to import module 'main': No module named 'main' when modules are thereAWS Lambda 返回 Unable to import module 'main': No module named 'main' when modules are there
【发布时间】:2021-10-16 03:41:48
【问题描述】:

所以我试图在 AWS Lambda 中设置一个函数来运行我从 zip 导入的一些 python 代码。

我已经编辑了处理程序来运行文件,然后是我想要运行的函数

我尝试在导入 zip 文件夹时创建目录中的文件,然后将其移至主函数目录。都没有用

不太清楚这里出了什么问题, 我运行测试时返回的完整错误是:

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

编辑:对 Lambda 来说真的很新,所以请原谅任何愚蠢的错误

【问题讨论】:

  • 您的 Lambda 函数处理程序应该是 def runJobs(event, context),而不是 def runJobs()。它将使用 2 个位置参数调用。这绝对是您的代码的问题,必须修复,但可能不是您的代码的初始问题,即导入失败。确保您已保存所有更改并部署了所有当前代码。 main.py 中还有哪些其他代码?您的部署 ZIP 文件中还有什么?
  • runJobs.py 调用了其他函数,其他文件是一个 json 文件,其中有一个密钥供我编辑谷歌表格。我需要对函数中的事件和上下文参数进行哪些更改?
  • 只需编写正确的函数声明,就像我上面指出的那样,是必要的。因此,我建议您编写一个非常基本的 main.py 版本(不包含所有其他代码),其中包括 def runJobs(event, context) 并做一些琐碎的事情,例如 print(42)。部署,然后测试。有用吗?
  • 所以我编辑了我的函数 def runJobs(event, context) 并添加了一个 print("that working"),但我仍然得到相同的响应 Response { "errorMessage": "Unable to import module 'main': No module named 'main'", "errorType": "Runtime.ImportModuleError", "stackTrace": [] }
  • 你提到了 main.py 和 runJobs.py。它们都存在吗? Lambda 显示的完整文件列表是什么?你确定你已经保存并部署了代码吗?

标签: python-3.x amazon-web-services aws-lambda


【解决方案1】:

问题在于,虽然您似乎有一个名为 main 的模块,但它尚未部署到 Lambda 服务。当您单击测试时,Lambda 会运行 已部署 代码。也许您的模块在您初始部署后的某个时间被重命名为 main?

需要保存对代码的本地更改,然后部署。部署步骤很重要,因为在您部署代码之前,Lambda 服务将继续运行之前的代码。

这实际上是历史上 Lambda 控制台中的一个常见问题,但已进行了增强以更明显地表明需要部署。例如,在您进行更改后,控制台现在会显示“未部署更改”,直到您点击部署按钮。

【讨论】:

  • 非常感谢您的帮助和回答。对于任何未来的读者来说,部署都很重要,因为它“更新”了所做的代码更改(对于新手来说只是一个非常简单的解释)。我的整个问题是,从历史上看,我被告知在测试之前永远不要“部署”代码,这是解决问题之间的障碍。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-09-28
  • 2014-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-08
  • 2014-07-17
相关资源
最近更新 更多