Python从GCP存储桶读Excel部署至Cloud Function出现ClientSession属性错误
错误根因
该报错和pandas本身没有关联,是Google Cloud Function运行环境中依赖的aiohttp库与gcsfs库版本不兼容导致的:
读取Google Cloud Storage(GCS)上的Excel文件时,pandas会自动调用
gcsfs库完成GCS资源读取,旧版本gcsfs依赖aiohttp的私有属性_connector,而aiohttpv3.8+版本调整了内部私有属性实现,移除了_connector相关定义,当ClientSession对象被销毁触发__del__方法时就会抛出该属性不存在的报错。
本地运行正常是因为本地环境的aiohttp和gcsfs版本刚好匹配,部署到GCF时平台自动拉取的依赖版本不匹配才会触发问题。
解决办法
- 方案1:固定依赖兼容版本
在项目的requirements.txt中添加如下版本声明,该组版本在GCF Python3.8运行环境下可正常运行:
aiohttp==3.8.4 gcsfs==2023.3.0
- 方案2:升级适配版本
直接将gcsfs升级到2023.6.0及以上的稳定版,该版本已经修复了对高版本aiohttp的兼容性问题,无需额外固定aiohttp版本。 - 方案3:修改读取逻辑绕开异步调用
显式调用gcsfs的同步接口读取文件流后再传入pandas,避免触发内部异步逻辑导致报错,示例代码:
import gcsfs import pandas as pd # 初始化GCS文件系统对象 fs = gcsfs.GCSFileSystem() # 同步读取文件流 with fs.open("gs://你的存储桶路径/目标文件.xlsx", "rb") as file_obj: df = pd.read_excel(file_obj, engine="openpyxl")
内容的提问来源于stack exchange,提问作者user5711693
相关产品推荐
相关产品推荐

