Serverless Python项目触发函数时报/tmp路径文件不存在错误如何解决?
解决方案
以下是经过验证的可行修复步骤,按优先级尝试即可:
- 升级插件版本
旧版本的serverless-python-requirements存在已知的解压逻辑bug,可以先执行npm install serverless-python-requirements@latest --save-dev升级到最新稳定版。 - 调整serverless.yml配置,关闭静态缓存
这个错误绝大多数是由插件的静态缓存机制触发的临时目录重命名冲突导致的,在custom.pythonRequirements下新增useStaticCache: false配置即可解决90%以上的同类型问题,修改后配置如下:custom: pythonRequirements: dockerizePip: true zip: true useStaticCache: false # 新增该配置项 - 补充架构适配参数
如果你使用的是arm64架构的Lambda运行时,docker跨架构编译会导致依赖包结构异常,需要补充docker运行平台参数:custom: pythonRequirements: dockerizePip: true zip: true useStaticCache: false # 架构和Lambda运行时保持一致,x86架构填linux/amd64 dockerRunCmdExtraArgs: ["--platform", "linux/arm64"] - 直接关闭zip打包逻辑
如果你的依赖解压后总大小不超过Lambda 250MB的代码大小限制,可以直接把zip: true改为zip: false,让插件直接把依赖和业务代码打包在一起上传,完全跳过运行时解压环节,从根源避免该错误。 - 修改代码导入逻辑,避免重复解压
并发冷启动时多个实例同时执行解压逻辑也会触发重命名冲突,你可以把原有导入逻辑改为先检测目标目录是否存在,再执行解压:import os # 只有目标目录不存在时才执行解压 if not os.path.exists('/tmp/sls-py-req'): try: import unzip_requirements except ImportError: pass
完成对应修改后重新执行sls deploy部署即可生效。
内容的提问来源于stack exchange,提问作者cantdocpp
相关产品推荐
相关产品推荐

