使用GitLab CI部署Serverless Flask至Lambda时遇spawn python3.8 ENOENT错误
解决GitLab CI部署Serverless Flask到AWS Lambda时的
spawn python3.8 ENOENT错误 错误提示spawn python3.8 ENOENT说明Serverless框架在执行过程中找不到python3.8可执行文件——本地环境正常是因为你的系统已经配置好Python3.8的可调用路径,但GitLab CI容器环境中虽然安装了Python3.8,却存在路径关联或命令匹配问题。
解决方案1:为Python3.8创建全局软链接
在CI的before_script中添加软链接命令,让python/python3命令直接指向Python3.8,确保Serverless能找到对应版本:
修改后的.gitlab-ci.yml:
image: ubuntu:latest stages: - deploy dev: only: - develop stage: deploy before_script: - apt-get update - DEBIAN_FRONTEND=noninteractive apt-get install -y software-properties-common && add-apt-repository ppa:deadsnakes/ppa && apt-get update && apt-get install -y python3.8 python3-pip && rm -rf /var/lib/apt/lists/* # 添加软链接,将python/python3指向python3.8 - ln -s /usr/bin/python3.8 /usr/bin/python - ln -s /usr/bin/python3.8 /usr/bin/python3 - apt update - apt install -y nodejs npm - npm install -g serverless - npm install script: - serverless deploy --stage dev environment: dev
注意:原脚本中的ARG DEBIAN_FRONTEND=noninteractive是Dockerfile语法,在CI脚本中需改为环境变量前缀形式,避免执行报错。
解决方案2:在Serverless配置中指定Python路径
直接在serverless.yml中告诉插件Python3.8的具体路径,避免依赖系统默认命令:
修改后的serverless.yml:
service: serverless-flask plugins: - serverless-python-requirements - serverless-wsgi custom: wsgi: app: app.app packRequirements: false pythonRequirements: dockerizePip: non-linux pythonBin: /usr/bin/python3.8 # 显式指定Python3.8路径 provider: name: aws runtime: python3.8 region: eu-west-3 memorySize: 256 timeout: 15 functions: app: handler: wsgi_handler.handler environment: ${file(env.${opt:stage, self:provider.stage}.json)} events: - http: ANY / - http: ANY /{proxy+}
可以在CI脚本中添加which python3.8命令,确认路径是否与配置一致。
解决方案3:使用预配置Python3.8的镜像
放弃手动安装Python,直接使用官方Python3.8镜像,避免环境配置问题:
修改后的.gitlab-ci.yml:
image: python:3.8-slim stages: - deploy dev: only: - develop stage: deploy before_script: - apt-get update && apt-get install -y nodejs npm && rm -rf /var/lib/apt/lists/* - npm install -g serverless - npm install script: - serverless deploy --stage dev environment: dev
该镜像自带Python3.8,且python/python3命令默认指向3.8版本,无需额外配置。
内容的提问来源于stack exchange,提问作者Léo Le Henaff
相关产品推荐
相关产品推荐

