Google Cloud Build部署云函数时找不到依赖报错求助
问题根因
你的配置逻辑从根本上不成立,踩了Cloud Build和Cloud Functions的运行机制坑:
- Cloud Build每一步都运行在独立的临时容器里,你在第一个
python:3.9容器里装的apt包、pip依赖,会在步骤结束后随容器销毁,完全不会留存到后续步骤。 - 执行
gcloud functions deploy时,Python依赖编译、安装的动作根本不在你跑gcloud命令的容器里执行,而是在Google Cloud托管的独立云函数构建环境中完成。这个默认构建环境没有预装libpoppler-cpp-dev,编译pdftotext的C扩展时自然找不到poppler的头文件,就会抛你看到的错误。 - 就算你把装依赖和部署命令塞到同一个Cloud Build步骤里也没用,只要调用的是
gcloud functions deploy,依赖安装动作就会被扔到GCP侧的托管环境跑,感知不到你在当前容器装的任何系统包。
修复方法
直接删掉你配置里那个单独装OS依赖的步骤,完全不需要它。修改Deploy步骤的参数,给GCF的托管构建流程传入需要预装的apt包列表,让构建环境在跑pip install前先把系统依赖装好就行。
修改后的cloudbuild.yml配置如下:
steps: # Deploy Function - name: "gcr.io/cloud-builders/gcloud" id: "Deploy Function" args: [ "functions", "deploy", "pdf_handler", "--entry-point", "main", "--source", ".", "--runtime", "python39", "--memory", "256MB", "--service-account", "my_service_account", "--trigger-http", "--timeout", "540", "--region", "europe-west1", "--set-build-env-vars", "APT_PACKAGES=build-essential libpoppler-cpp-dev pkg-config python3-dev" ] options: logging: CLOUD_LOGGING_ONLY
配置完成后,确保你项目根目录的requirements.txt里正确声明了pdftotext依赖即可,不需要提前在Cloud Build里执行pip install操作,GCF的构建流程会自动完成依赖安装。
备选方案(适配第一代云函数环境)
如果你使用的是第一代Cloud Functions运行环境,不支持通过APT_PACKAGES环境变量传入系统依赖,可以提前构建好预装了对应系统依赖的自定义构建镜像,上传到Artifact Registry后,在部署参数中追加--build-image 你的自定义构建镜像地址,指定用你自己的镜像完成依赖编译即可。
内容的提问来源于stack exchange,提问作者AmosPamos
相关产品推荐
相关产品推荐

