简介
当在serverless.yml中使用以下设置时:
custom:
pythonRequirements:
dockerizePip: true
slim: true
zip: true
slim:true
和 slim:false
会得到相同的文件大小。我该如何减小 zip 文件的大小?
完整内容
我正在使用 serverless 框架将 Python 代码及其依赖项部署到 AWS Lambda 函数中。为了满足 Lambda 250MB 的限制,我按照 此处 提供的建议来减少依赖项的大小。在我的 serverless.yml 文件中,我有以下内容:
provider:
name: aws
runtime: python3.6
plugins:
- serverless-python-requierments
custom:
pythonRequierments:
dockerizePip: true
slim: true
zip: true
functions:
...
我的 requirements.txt 文件如下:
xgboost==1.3.3
pandas==1.0.1
numpy == 1.18.5
...
我不断地收到以下错误:
Unzipped size must be smaller than 262144000 bytes..
这让我相信我的requierments.zip文件太大了;冗长的输出显示
uploading service test.zip file to s3 271.17 MB
。我试着缩小文件大小,运行了
sls deploy
并将dockerizePip
和slim
设置为false
进行测试,但结果仍然是一个271.17MB的test.zip文件。这似乎很困惑,因为我理解slim:true
应该在压缩文件之前减少文件大小,但是使用slim:true
和slim:false
运行得到的文件大小相同。我该如何让slim
生效呢?更新1:
我尝试添加一个
slimPattern
,如here所讨论,在pythonRequierments
中。slimPatterns:
- '**/*.dist-info/**'
但是所有的dist信息目录仍然存在于zip文件中,输出的大小也相同(271.17MB)。
更新2:
我保留了从更新1中的所有内容,但是删除了.serverless目录和requierments.zip。所有的.dist-info目录仍然存在,尽管我在slimPatterns中排除了它们(或者我认为是这样)。
更新3:
我尝试使用包排除,做了以下操作:
package:
exclude:
-node_modules/**
-'**/*.dist-info/**'
这确实成功地删除了node_modules(我本应该在之前就做的),但未成功以任何方式更改.requierments.zip
,所有.dist-info
目录保持不变。
更新4:
我按照 this 的方法,在pythonRequirements
中添加了一个noDeploy
字段,其中包括setuptools
和six
。尽管如此,两者都出现在我的.requirements.zip
文件中,我的文件大小没有改变(269.9 Mb,与更新3相同,由于删除了node_modules
而稍微小了一些)