远程服务器构建pex文件时遭遇aiobotocore与botocore依赖冲突问题求助
这个问题的核心是:虽然你只在requirements.txt里声明了boto3,但boto3会自动依赖特定版本的botocore,而你的环境中可能有某个隐性依赖(比如其他第三方库)间接引入了aiobotocore==2.3.4,它对botocore的版本要求和当前boto3拉取的botocore版本(1.27.55)不兼容,从而导致冲突。
下面是具体的排查和解决步骤:
第一步:定位引入aiobotocore的源头
先搞清楚到底是哪个包间接拉进来了aiobotocore,推荐用pipdeptree工具查看完整依赖链:# 先安装pipdeptree(如果没装的话) pip install pipdeptree # 过滤出相关依赖 pipdeptree | grep -E "aiobotocore|botocore"执行后你会看到类似
some-package==x.x.x -> aiobotocore==2.3.4的输出,就能知道是哪个包引发的问题。第二步:指定兼容的版本组合
aiobotocore==2.3.4要求botocore在1.24.21到1.24.22之间,而boto3和botocore是严格版本绑定的(比如boto3 1.21.x对应botocore 1.24.x)。你可以在requirements.txt里明确指定兼容的版本:boto3==1.21.21 botocore>=1.24.21,<1.24.22这样既能满足aiobotocore的版本要求,也能保证boto3和botocore的兼容性。
第三步:排除不必要的依赖(可选)
如果排查后发现aiobotocore是某个你不需要的依赖项带进来的,可以用pip的排除语法在requirements.txt里移除它:# 假设是some-package引入了aiobotocore,排除它 some-package==x.x.x --exclude aiobotocore注意:这么做之前要确认排除aiobotocore不会影响你的业务功能。
第四步:清理缓存重新构建pex
有时候pex会缓存旧的依赖包,导致版本冲突依然存在。你可以尝试清理缓存后重新构建:# 用--no-cache参数跳过缓存构建pex pex -r requirements.txt -o your_app.pex --no-cache
内容的提问来源于stack exchange,提问作者Vinayak Gupta

