使用awscli-local报错:无法从botocore.utils导入SSOTokenFetcher
解决awslocal报错:cannot import name 'SSOTokenFetcher' from 'botocore.utils'
问题根源
awscli-local(awslocal)与你当前安装的aws-cli v2.9.19依赖的botocore版本存在兼容性冲突:SSOTokenFetcher在新版botocore中已被移除/重构,但awslocal的代码仍在尝试导入该类。
解决方案
方法1:使用独立虚拟环境(最推荐,彻底隔离依赖)
- 安装虚拟环境工具(Ubuntu/Debian):
sudo apt install python3-venv - 创建并激活专属虚拟环境:
python3 -m venv ~/awslocal-env source ~/awslocal-env/bin/activate - 在虚拟环境内安装兼容版本的依赖:
pip install awscli-local botocore==1.29.19 awscli==2.9.19 - 后续使用awslocal时,先激活虚拟环境,或把虚拟环境的
awslocal路径加入系统PATH(比如在~/.bashrc中添加:export PATH="$HOME/awslocal-env/bin:$PATH")。
方法2:降级botocore到兼容版本(不推荐,可能影响标准aws-cli)
- 查看当前botocore版本:
pip show botocore - 强制降级到与aws-cli v2.9.19匹配的版本(对应botocore 1.29.19):
pip install botocore==1.29.19 --force-reinstall
方法3:使用Docker版awslocal(完全规避本地Python依赖)
直接用Docker容器替代本地awslocal,完全隔离依赖冲突:
- 执行单条命令示例:
docker run --rm -it -e AWS_ACCESS_KEY_ID=test -e AWS_SECRET_ACCESS_KEY=test -e AWS_DEFAULT_REGION=us-east-1 localstack/aws-cli-local s3 ls - 设置别名简化使用(添加到
~/.bashrc或~/.zshrc):alias awslocal='docker run --rm -it -e AWS_ACCESS_KEY_ID=test -e AWS_SECRET_ACCESS_KEY=test -e AWS_DEFAULT_REGION=us-east-1 localstack/aws-cli-local' - 生效别名:
source ~/.bashrc
注意事项
- 避免在全局Python环境中混合调整aws-cli和awslocal的依赖,极易引发版本冲突。
- 虚拟环境和Docker方案是长期解决依赖问题的最优选择。
内容的提问来源于stack exchange,提问作者M T
相关产品推荐
相关产品推荐

