Serverless部署提示scandir '.serverless/requirements'不存在错误如何解决
错误触发原因
- 权限不匹配:执行部署命令时加了sudo,serverless进程的运行权限会和serverless-python-requirements插件的临时文件读写权限不一致,插件在构建前置步骤会清空所有无权限访问的临时目录,包括你手动创建的
.serverless/requirements目录,后续扫描目录的步骤自然找不到对应路径 - 插件配置缺失:如果serverless.yml中没有正确配置serverless-python-requirements的参数,尤其是开启了docker构建、压缩打包等功能时,插件会跳过requirements目录的生成步骤,仅执行前置清理逻辑,也会触发该报错
- 清理逻辑冲突:部署命令中虽然只删除了.requirements.zip,但serverless部署的默认流程会自动清空.serverless目录下的所有临时构建产物,你手动提前创建的requirements目录会在部署初始化阶段直接被删除,不会保留到构建步骤
解决方法
- 移除部署命令中的sudo权限:给当前用户分配项目目录的完整读写权限,避免跨权限读写的文件所有者冲突,调整后的基础命令如下:
date && rm -rf .requirements.zip .serverless && SLS_DEBUG=* serverless deploy --verbose && date - 补全serverless.yml的插件配置,明确指定插件的工作路径和构建规则,参考配置如下:
plugins: - serverless-python-requirements custom: pythonRequirements: dockerizePip: non-linux # 本地为Mac/Windows环境时配置,Linux部署可设为false useStaticCache: false cacheLocation: ./.serverless/cache - 升级插件到最新稳定版:v5.0.0之前的serverless-python-requirements版本存在已知的构建目录清理逻辑bug,直接升级即可修复:
npm install serverless-python-requirements@latest -g - 临时规避方案:如果排查期间需要快速验证,可以在部署命令中提前创建目标目录,同时关闭插件的自动清理功能,在custom.pythonRequirements下添加
noDeploy: [],命令调整为:date && rm -rf .requirements.zip .serverless && mkdir -p .serverless/requirements && SLS_DEBUG=* serverless deploy --verbose && date
内容的提问来源于stack exchange,提问作者JamesBowery
相关产品推荐
相关产品推荐

