AWS:无法导入模块“处理程序”:没有名为“numpy”的模块

Posted

技术标签:

【中文标题】AWS:无法导入模块“处理程序”:没有名为“numpy”的模块【英文标题】:AWS: Unable to import module 'handler': No module named 'numpy' 【发布时间】:2020-07-08 04:21:25 【问题描述】:

这里是 AWS 新手

我必须通过 gitlab CI 将我的 python 脚本作为 lambda 托管,并通过 AWS 上的 cloudwatch 触发它。

我正在学习以下教程:

    https://docs.gitlab.com/ee/user/project/clusters/serverless/aws.html https://serverless.com/blog/serverless-python-packaging/

从第一个教程开始,我只使用 .gitlab-ci.yml 文件并将其添加到第二个教程中显示的教程中(但我选择 3.7 作为运行时,而不是 python 3.6)

我有以下serverless.yml 文件

service: numpy-test

provider:
  name: aws
  runtime: python3.7

functions:
  numpy:
    handler: handler.main

plugins:
  - serverless-python-requirements

custom:
  pythonRequirements:
    dockerizePip: non-linux

package:
  exclude:
    - venv/**

以及以下.gitlab-ci.yml 文件:

image: node:latest

stages:
  - deploy

production:
  stage: deploy
  before_script:
    - npm config set prefix /usr/local
    - npm install -g serverless
    - npm install --save serverless-python-requirements
  script:
    - serverless deploy
  environment: production

当我推送.gitlab-ci.yml 文件时,它运行时没有任何错误。

我可以看到在我的 AWS lambda 中创建的 lambda 函数。当我将此 lambda 与 Cloudwatch 连接以使 lambda 每 1 分钟触发一次时,我在日志中收到以下错误:

我还有一个requirements.txt 文件,它有

numpy==1.18.2

我的目录中有以下文件/文件夹:

有人可以帮我解决这个问题并解释我正在做的错误以及如何纠正它吗?

编辑 1

我编辑了 makozaki 指出的 serverless.yml 文件,现在当我将它推送到 repo 时,CI 文件失败并出现以下错误:

【问题讨论】:

【参考方案1】:

其中一个原因可能是您在 .gitlab-ci.yml 文件中使用了 docker 映像。 但是你想用一些模块来部署 python lambda。 尝试使用既有配置 python 又有节点的图像,如下图:

nikolaik/python-nodejs

或者如果你想要一些特定的版本,那么你也可以这样做:

nikolaik/python-nodejs:python3.7-nodejs13

出现错误后,我尝试将其复制到我的帐户中。 所以,现在我在 serverless.yml 以及 .gitlab-ci.yml 文件中做了一些更改。

您可以在 serverless.yml 中更改服务名称

和 .gitlab-ci.yml 中的 aws 区域

在此之后,它部署在我的帐户中并且运行良好。

这是测试结果: Null 在那里,因为函数没有返回任何值,但它打印了数组。

这是我的 cloudwatch 日志:

希望在进行这些更改后,您将能够使其正常工作。

【讨论】:

我试图复制这个问题,它对我来说很好,所以我正在更新(编辑)我的答案。【参考方案2】:

您似乎错过了将serverless-python-requirements 插件添加到serverless.yml 的步骤。

尝试按照提到的博客添加它:

# serverless.yml

plugins:
  - serverless-python-requirements

custom:
  pythonRequirements:
    dockerizePip: non-linux

【讨论】:

嘿,感谢您指出。添加后,在执行serverless deploy 时出现新错误。我正在编辑问题以添加错误 如何在脚本npm install --save serverless-python-requirements之前添加.gitlab-ci.yml 我也这样做了,但我仍然收到与编辑 1 中所示相同的错误 所以现在错误日志显示您的package.json 存在问题,您可以将其内容添加到问题中吗?您是否尝试在本地执行这些命令?您无需通过 CI 对其进行测试。

以上是关于AWS:无法导入模块“处理程序”:没有名为“numpy”的模块的主要内容,如果未能解决你的问题,请参考以下文章

aws lambda 无法导入模块“lambda_function”:没有名为“requests”的模块

从 aws-lambda 导入 pysftp 时如何修复导入错误“没有名为 '_cffi_backend' 的模块”

没有名为 pymysql 的模块 - aws 无服务器框架

ImportError:没有名为 pydot 的模块(无法导入 pydot)

ImportError:无法导入设置(是不是在 sys.path 上?设置文件中是不是存在导入错误?):没有名为 setting 的模块

Lambda 上的 MySQL 连接器产生无法导入模块“myapp”:没有名为“mysql”的模块