如何修复AWS lambd中的“无法导入模块”错误

2024-04-29 02:26:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我写了一个脚本来帮助我自动创建新的微服务。它的工作原理是获取位桶存储库的URI和AWS凭据。它克隆存储库,添加一个位桶-管道.yml文件。通过调用CLI创建一个新的lambda函数,并将模板zip用作基本代码。它还将lambda处理程序设置为main.lambda_handler。然后将必要的存储库变量添加到bitbucket并提交项目文件。然后管道运行并更新lambda上的代码。一切似乎都很好,直到我试着运行Lambda。在

这是比特桶-管道.yml文件

image: peteremil/zipaws

pipelines:
  default:
    - step:
        name: Deploy code to S3
        deployment: staging
        script:
          - mkdir packages
          - pip install -r requirements.txt --target=packages
          - chmod 777 -R *
          - zip -r $semver.zip .
          - aws s3 cp $semver.zip s3://{code_s3_bucket}/$staging_location/
          - aws lambda update-function-code --region $aws_region --function-name {function_name}-function --s3-bucket {code_s3_bucket} --s3-key $staging_location/$semver.zip

这是主.py文件

^{pr2}$

我创建了以下测试事件

{
    "queryStringParameters": {
        "local_id": "00000000"
    }
} 

我创建的事件的预期结果应该是

{
    "statusCode": 200,
    "headers" : {"content-type": "application/json"},
    "body" : {
        {
            "success" : "00000000"
    }
}

但是lambda执行失败了给了我

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

我尝试重命名处理程序,获取另一个正在工作的lambda的设置(从控制台手动创建),并查看是否存在任何差异,但我总是得到相同的错误。这个主.py文件在内联代码编辑器中显示良好。在

更新1 我将import requests行添加到主.py因为事实证明是它造成了问题。我认为这是无害的,这就是为什么我没有把它包括在原来的问题体。在


Tags: 文件lambda代码namepyaws管道s3
1条回答
网友
1楼 · 发布于 2024-04-29 02:26:20

事实证明,在我的代码中,我在packages\文件夹中安装了一个库的导入,但是我在将文件夹添加到sys.path之前导入了它,所以解决方案是在将packages_path路径添加到sys.path之后,import requests。在

在主.py现在就这样开始

import json
import os
import sys

packages_path = os.path.join(os.path.split(__file__)[0], "packages")
sys.path.append(packages_path)

import requests #moved this line down after adding packages_path to sys.path

相关问题 更多 >