第一代Google Cloud Function中Python3.11导入Pub/Sub遇ImportError求助
在Python 3.11环境下部署Google Cloud Function时,执行from google.cloud import pubsub_v1导入操作始终触发以下错误:
ImportError: cannot import name 'pubsub_v1' from 'google.cloud' (unknown location)
确认google-cloud-pubsub未成功安装,当前requirements.txt内容如下:
functions-framework==3.* firebase-functions==0.1.0 google-cloud-pubsub -e ./localpackage
已尝试的操作:
- 分别使用指定版本、不指定版本的方式声明
google-cloud-pubsub,均无效 - 通过Google Cloud控制台和Windows下的gcloud命令行两种方式部署,部署命令:
gcloud functions deploy storage_finalize --source=on_finalize --runtime python311 --trigger-resource testproject-123.appspot.com --trigger-event google.storage.object.finalize --entry-point finalize
确保本地依赖与部署环境一致
本地创建Python 3.11虚拟环境,激活后执行pip install -r requirements.txt,通过pip list确认google-cloud-pubsub已成功安装,本地测试无报错后再执行部署。指定兼容Python 3.11的
google-cloud-pubsub版本
部分旧版本google-cloud-pubsub对Python 3.11支持不佳,在requirements.txt中明确指定兼容的稳定版本,示例:functions-framework==3.* firebase-functions==0.1.0 google-cloud-pubsub==2.19.0 -e ./localpackage排查本地包的依赖冲突
暂时注释requirements.txt中的-e ./localpackage,重新部署测试。若错误消失,说明本地包存在依赖冲突或自身依赖的google-cloud相关包版本过低,需调整本地包的依赖配置。强制清理部署缓存
使用gcloud部署时添加--no-cache参数,强制重新安装所有依赖,避免缓存的旧依赖导致问题:gcloud functions deploy storage_finalize --source=on_finalize --runtime python311 --trigger-resource testproject-123.appspot.com --trigger-event google.storage.object.finalize --entry-point finalize --no-cache确认
requirements.txt位置正确
确保requirements.txt位于部署目录的根目录(即on_finalize文件夹下),若路径错误,部署过程无法读取依赖配置,会导致google-cloud-pubsub未安装。
内容的提问来源于stack exchange,提问作者Aliosha kolioshap

