使用Poetry安装boto3、s3fs时依赖解析失败
问题描述
使用pip可正常安装依赖:
pip install boto3 pandas s3fs
但执行Poetry安装命令时失败:
poetry add boto3 pandas s3fs
错误核心为版本依赖冲突:
因为没有匹配>2023.3.0,<2024.0.0的s3fs版本
且s3fs(2023.3.0)依赖aiobotocore(>=2.4.2,<2.5.0),因此s3fs(>=2023.3.0,<2024.0.0)需要aiobotocore(>=2.4.2,<2.5.0)。
又因为没有匹配>2.4.2,<2.5.0的aiobotocore版本
且aiobotocore(2.4.2)依赖botocore(>=1.27.59,<1.27.60),因此s3fs(>=2023.3.0,<2024.0.0)需要botocore(>=1.27.59,<1.27.60)。
同时boto3(1.26.91)依赖botocore(>=1.29.91,<1.30.0)
且没有匹配>1.26.91,<2.0.0的boto3版本,所以s3fs(>=2023.3.0,<2024.0.0)与boto3(>=1.26.91,<2.0.0)不兼容。
因此,由于engexploit-k8s-pod-operator-images同时依赖boto3(1.26.91)和s3fs(2023.3.0),版本解析失败。
解决方案
方案1:指定兼容的版本组合
手动选择botocore版本范围重叠的boto3和s3fs版本:
poetry add boto3==1.27.59 s3fs==2023.3.0 pandas
boto3 1.27.59依赖的botocore版本为1.27.59,正好满足s3fs 2023.3.0对botocore的要求(>=1.27.59,<1.27.60)。
方案2:升级s3fs到兼容更高botocore的版本
s3fs 2024.x版本已放宽对aiobotocore的依赖约束,可直接安装最新版本:
poetry add boto3 pandas s3fs@latest
Poetry会自动解析出兼容的版本组合。
方案3:手动修改pyproject.toml后更新锁文件
在pyproject.toml中调整依赖版本约束:
[tool.poetry.dependencies] # 保留其他已有依赖 boto3 = "~1.27.59" s3fs = "~2023.3.0" pandas = "^2.0"
然后执行:
poetry lock --no-update poetry install
内容的提问来源于stack exchange,提问作者jtobelem

