如何排除已在Lambda层中的包,不随AWS Lambda函数打包
解决Pipenv管理Lambda依赖时排除层中已有依赖的方案
方法一:将层依赖标记为开发依赖
把Lambda层中已存在的依赖归类到Pipenv的开发依赖,既满足本地测试的依赖需求,又能在打包生产部署包时自动排除:
- 安装依赖时添加
--dev参数:
例如层中包含pipenv install <依赖名称> --devrequests,就执行pipenv install requests --dev,该依赖会被写入Pipfile的[dev-packages]区块,而非生产依赖的[packages]部分。 - 生成仅包含生产依赖的清单:
pipenv lock --requirements --exclude-dev > requirements.txt - 基于清单安装依赖到部署目录:
最终的pip install -r requirements.txt --target ./lambda_deploy_packagelambda_deploy_package目录里不会包含层中已有的依赖。
方法二:自定义打包脚本简化流程
在Pipfile的[scripts]区块定义打包命令,一键完成依赖筛选与打包操作:
[scripts] build-lambda-package = "pipenv lock --requirements --exclude-dev > reqs.txt && pip install -r reqs.txt --target ./deploy && rm reqs.txt"
之后只需运行以下命令即可生成干净的部署包:
pipenv run build-lambda-package
本地测试说明
执行pipenv install --dev会安装所有生产依赖和开发依赖(包括层中的依赖),完全满足本地运行Lambda函数的测试需求。
内容的提问来源于stack exchange,提问作者Dan Hook
相关产品推荐
相关产品推荐

