为何安装boto3会破坏非root用户的awscli安装?
解决Ubuntu 14.04 EC2实例中安装boto3破坏非root用户awscli的问题
我来帮你搞定这个问题——你遇到的本质是系统级AWS CLI和boto3的Python依赖版本冲突,咱们一步步拆解解决:
问题根源
你通过sudo apt-get install awscli装的AWS CLI,是绑定Ubuntu系统Python(2.7.6)自带的特定版本botocore(你这里是1.9.18)的。不管你用sudo pip install boto3全局装,还是用pip install --user boto3给非root用户装,都会升级或替换botocore版本,导致apt装的AWS CLI因为依赖不匹配而失效。
可行解决方案
方案1:用虚拟环境彻底隔离(最推荐)
虚拟环境能把你的脚本依赖和系统环境完全分开,绝对不会影响系统级的AWS CLI:
- 先装虚拟环境工具(如果没装的话):
sudo apt-get install python-virtualenv - 给你的Python脚本创建专属虚拟环境:
virtualenv ~/my_script_env - 激活虚拟环境:
source ~/my_script_env/bin/activate - 在激活的环境里装boto3:
pip install boto3
之后运行你的脚本前,先激活这个环境就行,系统的AWS CLI完全不受影响。
方案2:固定boto3版本匹配系统botocore
如果你一定要全局装boto3,可以找和系统botocore兼容的版本:
- 先查系统当前的botocore版本:
pip show botocore | grep Version # 你这里应该输出1.9.18 - 安装和这个botocore兼容的boto3版本(比如boto3 1.6.x系列对应botocore 1.9.x):
sudo pip install boto3==1.6.28
这个版本的boto3会兼容现有botocore,不会强制升级,也就不会破坏AWS CLI。
方案3:修复已损坏的非root用户AWS CLI
如果已经出现冲突了,可以强制非root用户用系统Python运行AWS CLI:
- 找到AWS CLI的执行脚本路径:
which aws # 一般是/usr/bin/aws - 编辑这个脚本,确保第一行的Python路径指向系统Python:
sudo nano /usr/bin/aws
把第一行改成:
#!/usr/bin/python
避免用#!/usr/bin/env python(它会优先找用户目录下的Python环境,容易引发冲突)。
验证操作
完成后分别在root和非root用户下测试:
aws --version sudo aws --version
同时跑你的Python脚本,确认boto3能正常导入使用。
内容的提问来源于stack exchange,提问作者Shawn Volpe
相关产品推荐
相关产品推荐

