【发布时间】:2020-04-17 16:28:43
【问题描述】:
我正在尝试部署具有大型二进制依赖项的 python 包,例如numpy、scipy、astropy、pandas 等... zip 文件超过 400MB,所以我必须将他的大小缩小到 250MB 以下,以便能够将其部署到 S3 的 lambda 层。
我知道我可以使用类似的东西删除测试、文档和 pycache 目录
find -name "tests" -type d | xargs rm -rf
find -name "docs" -type d | xargs rm -rf
find -name "__pycache__" -type d | xargs rm -rf
但这还不够……
理论上可以删除 *.pyc 和 *.so 文件吗?我知道,例如,serverless-framework 和 serverless-python-requirements 提供了 slim 选项来打包删除所有 *.pyc 和 *.so 文件的依赖项。但我认为 Lambda 环境需要这些文件……如果可能的话,我不想使用任何框架,我最终可以运行 docker 来从 lambda 兼容的图像构建二进制文件(我现在正在使用 WSL)。我尝试了很多东西,但它们都不起作用,我不知道为什么......
我非常感谢任何帮助,以了解将如此庞大的包部署到 Lambda 的可能性和不可行...
【问题讨论】:
-
.pyc 文件不应包含在内,.so 确实需要存在。
-
另外,400MB 听起来很疯狂,即使所有这些模块都是静态编译的
-
好的,谢谢。如何不静态编译它们?
-
对于疯狂的维度,我认为这是因为传递依赖。例如,我不使用 matplotlib,但我认为其他包需要...
-
当我在 lambda 中遇到限制时,我通常会切换到 fargate 任务,它可以完成 lambda 可以完成的大部分任务。
标签: python aws-lambda