导入s3fs报错:无法从botocore.httpsession导入InvalidProxiesConfigError
问题原因
报错核心是Python依赖包版本冲突,具体对应关系如下:
- 你使用的
s3fs==2021.5.0依赖aiobotocore==1.4.2,而该版本的aiobotocore要求botocore版本必须介于1.20.106~1.20.107之间 - 你安装的
boto3==1.18.65绑定的botocore版本为1.19.28,远低于aiobotocore要求的最低版本,导致aiobotocore导入时找不到高版本botocore才有的InvalidProxiesConfigError类,直接抛出导入错误 - 额外的fsspec版本不兼容是第二个隐患:
s3fs==2021.5.0要求fsspec严格为2021.05.0,你环境中的fsspec版本为2021.10.1,也会引发潜在运行异常
此前运行正常是因为之前的环境中几个依赖版本刚好匹配,近期大概率是环境内的boto3、fsspec等包被更新,破坏了版本匹配关系。
解决方案
可根据你的业务限制任选一种方案执行:
- 方案1:固定全量依赖版本保证兼容
先执行pip3 uninstall -y s3fs aiobotocore botocore fsspec boto3卸载现有冲突依赖,再把requirements.txt替换为以下经过验证的兼容版本组合,重新执行pip3 install -r requirements.txt即可:boto3==1.18.65 botocore==1.21.65 s3fs==2021.08.0 fsspec==2021.08.1 fastparquet==0.7.1 aiobotocore==1.4.2 - 方案2:升级boto3适配现有s3fs版本
如果你不想修改s3fs版本,直接执行以下命令升级对应依赖即可解决冲突:
该版本的boto3绑定的botocore刚好符合aiobotocore 1.4.2的版本要求,同时补装对应版本的fsspec解决第二个不兼容问题。pip3 install boto3==1.20.26 fsspec==2021.05.0 - 方案3:升级到高版本s3fs避免冲突
如果没有旧版本依赖限制,直接升级到更新的稳定版s3fs即可,新版本对依赖的适配性更好:
该版本组合不存在依赖冲突,可直接满足dataframe写入S3的需求。pip3 install s3fs==2023.10.0 fsspec==2023.10.0 boto3==1.28.85
内容的提问来源于stack exchange,提问作者muazfaiz
相关产品推荐
相关产品推荐

