无服务器框架 - Python 和 Requirements.txt

21

使用Serverless框架v1.0.0,我在服务根目录中有一个'requirements.txt'文件,其内容是依赖的Python包列表(例如requests)。

然而,我的部署函数失败了,因为似乎没有安装这些依赖项。

'无法导入模块'handler':没有名为requests的模块'

我假设是Serverless执行pip install,但我的生成zip文件很小,显然它没有执行,这是设计如此还是我的失误,缺少某些东西?如果是Lambda执行此操作,那么我错过了什么?

是否有关于如何以及它是如何工作的文档?是Serverless执行pip安装还是AWS Lambda执行?


我认为无服务器不会运行pip。在部署无服务器项目之前,您必须自己运行它。 - doorstuck
请查看以下详细指南:https://dev59.com/ZFkS5IYBdhLWcg3wSk_b#50027031 - GWed
3个回答

30
你需要安装 serverless-python-requirementsdocker
$ npm install serverless-python-requirements

然后将以下内容添加到您的serverless.yml文件中

plugins:
   - serverless-python-requirements

custom:
  pythonRequirements:
     dockerizePip: non-linux

确保您在CLI中处于Python虚拟环境中:

$ source venv/bin/activate

通过pip安装任何依赖项-请注意,在CLI中,您可以通过终端文本左侧的venv判断venv是否处于活动状态

(venv) $ pip install <NAME>
(venv) $ pip freeze > requirements.txt

确保你已经打开了Docker,然后像平常一样部署无服务器应用。

$ serverless deploy

会发生的事情是,serverless-python-requirements将在Lambda环境中使用docker为您构建Python软件包,并将其压缩准备好与其余代码一起上传。

完整指南在此处


如果您在使用“$ serverless deploy”命令时遇到问题,可能需要删除过去可能起作用的冗余node_modules,就像我遇到的情况一样。我必须执行以下命令:$ rm -rf node_modules $ npm install serverless-python-requirements $ serverless deploy - Gwen Au
在部署应用时,我从未想到+1 for 'source venv/bin/active'可能会成为问题,但显然它是!谢谢 - Karl

6
现在你可以使用 serverless-python-requirements。它适用于纯Python和需要本地编译的库(使用Docker):
这是一个Serverless v1.x插件,用于自动捆绑requirements.txt中的依赖项,并使它们在你的PYTHONPATH中可用。
要求 Serverless >= v1.12

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接