具有无服务器python要求的无服务器部署不起作用

时间:2018-11-30 03:40:49

标签: python psycopg2 serverless aws-serverless

我正在尝试使用无服务器部署python lambda函数。我需要psycopg2库,因此我使用了serverless-python-requirements插件并将其添加到我的serverless.yml文件中。

plugins:
  - serverless-python-requirements
custom:
    pythonRequirements:
        dockerizePip: non-linux

我可以成功部署该功能:

Serverless: Installing requirements from 
/Users/Desktop/postgresql/.serverless/requirements/requirements.txt ...
Serverless: Docker Image: lambci/lambda:build-python3.6
Serverless: Packaging service...
Serverless: Excluding development dependencies...
Serverless: Injecting required Python packages to package...
Serverless: Uploading CloudFormation file to S3...
Serverless: Uploading artifacts...
Serverless: Uploading service .zip file to S3 (43.07 MB)...
Serverless: Validating template...
Serverless: Updating Stack...
Serverless: Checking Stack update progress...

..............
Serverless: Stack update finished...

但是当我检查Cloudwatch日志时,它说“没有名为'psycopg2'的模块”。

我的zip文件的结构是:

    |--node_modules
    |--.gitignore
    |--handler.py
    |--package-lock.json
    |--package.json
    |--serverless.yml

我运行无服务器部署时没有创建.serverless /目录...

任何帮助将不胜感激!

5 个答案:

答案 0 :(得分:0)

您是否正确安装了python依赖项?

serverless试图从以下位置安装要求 Serverless: Installing requirements from /Users/Desktop/postgresql/.serverless/requirements/requirements.txt

我建议关注

  • 创建virtualenv virtualenv ./env
  • 激活它 source env/bin/activate
  • 安装您的副总裁 pip install psycopg2
  • 冻结您的本地依赖项 pip freeze > requirements.txt

假设您的代码正在导入依赖项,请使用无服务器进行部署。

答案 1 :(得分:0)

您只需要在requirements.txt文件中定义您的Python依赖项。您可以手动执行此操作,也可以通过以下方式使用点子冻结:

 pip freeze > requirements.txt

答案 2 :(得分:0)

有点晚了,但是对于那些面临类似问题的人。

您正在将需求部署为zip。您必须先解压缩需求,然后才能将其导入python脚本中。在要导入库的python脚本之上添加以下代码行:

dummy = 0

如果您愿意或只是通过,可以在异常上引发错误。

答案 3 :(得分:0)

我在AWS上部署了Python Flask应用程序,并在设置它时遇到了相同的错误。我通过执行以下操作解决了该问题,

我希望您使用的是虚拟环境,其中安装了所需的所有Python库。在您的文件夹列表中没有看到虚拟环境文件。您可以检查我的git repo的自述文件,以了解如何从头开始构建。我记录了我执行的所有步骤-https://github.com/shyam454/Flask_AWS

注意:回购有效,但我仍在开发中,因此自述文件中提到的端点尚未包含在代码中。但是对于Python + Flask设置来说还是不错的

如果您已经具有虚拟环境,请执行以下步骤,

在使用无服务器部署之前,请先进行pip冻结> requirements.txt

此命令将包含您在虚拟环境中安装的所有python库,这些库将存在于requirements.txt文件中

在serverless.yml文件中,添加以下行

插件:   -无服务器wsgi   -serverless-python-要求

现在,无服务器部署

您可以看到,无服务器将安装requirements.txt中的所有需求。部署无服务器时,您应该看到以下几行

无服务器:从xxxxxx \ AWS \ Flask_AWS.serverless \ requirements.txt中的xxxxxx \ AWS \ Flask_AWS \ requirements.txt生成的需求...

无服务器:从xxxxxxx \ AWS \ Flask_AWS.serverless \ requirements \ requirements.txt中安装要求...

这是当它在云中安装python库时,您不会收到没有模块可用的错误。

希望对您有帮助。

答案 4 :(得分:0)

我建议您使用 AWS lambda 层。 在aws lambda层手动上传psycopg2的工作包。

并在 serverless.yml 上引用它 名称:[无服务器项目的名称] 层: - [arn-of aws 层包]

注意:layers 在 serverless.yml 中同级名称